0

我在理解 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;
        }

}

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

我想知道如何在不改变原来的resultSet的情况下查询resultSet,使resultSet包含选择的多个IssueType Names的对应数据。非常感谢您在这方面的帮助。

4

2 回答 2

0

您应该声明DispIRTSiteReportsDataContract

[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; }
} 

希望这会有所帮助。

于 2012-05-31T11:54:09.143 回答
0

问题是您添加了谓词,它转换为AND. 如果您使用Contains,您将获得与以下相同的语义OR

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

(注:无foreach循环)

于 2012-05-31T18:02:32.527 回答