将 Linq 中的查询迭代延迟到实体



我在理解 LINQ to Entites 查询时遇到问题,该查询没有给我所需的结果。我有以下代码,它应该执行延迟查询并在 Silverlight Datagrid 中显示结果。

  public List<DispIRTSiteReports> DisplayIRTSiteReportsFilOn(List<IssueTypes> issueType, DateTime fDate, DateTime tDate)
  {
  try
        {
            var resultSet = from items in DataContext.IRT_Limited_View
                            select items;
            var iType = issueType.Select(i=>i.IssueName); //contains multiple selected issue type Names
            if (issueType.Count != 0)
            {
                foreach (var type in iType)
                {
                    var copy = type;
                    resultSet = resultSet.Where(items => items.Type_Text.Equals(copy));                       
                }                    
            }
            var newResultSet = (from q in resultSet
                                where q.Date_Time > fDate && q.Date_Time < tDate
                                select new DispIRTSiteReports
                                {                                        
                                    PhExt = q.Phone_Extension,
                                    IssueType = q.Type_Text,
                                    IssueSubType = q.Subtype_Text,
                                    IssueDes = q.Issue_Description
                                }).ToList();
            return newResultSet;
        }
        catch (Exception ex)
        {
            throw ex;
        }

}

我选择了多个 IssueType 名称,它们存储在 var iType 中,但是当我执行代码时,resultSet 包含 null,因为第一次"foreach"迭代会使用第一个问题类型名称更改结果集,当第二次迭代完成时,结果集无法与第二个问题类型名称匹配,因此结果集变为空。

我想知道如何在不更改原始结果集的情况下查询结果集,以便结果集包含所选多个问题类型名称的相应数据。非常感谢您在这方面的帮助。

问题是你添加了谓词,这转化为AND .如果您使用 Contains您将获得与 OR 相同的语义:

resultSet = resultSet.Where(items => iType.Contains(items.Type_Text));

(注意:无foreach循环)

你应该将DispIRTSiteReports声明为DataContract

[Serializable]
[DataContract]
public class DispIRTSiteReports
{                                             
   [Key]
   [DataMember]
   public long Id { get; set; }
   [DataMember]
   public string PhExt { get; set; }
   [DataMember]
   public string IssueType { get; set; }
   [DataMember]
   public string IssueSubType { get; set; }
   [DataMember]
   public string IssueDes { get; set; }
} 

希望这会有所帮助。