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

}

複数の IssueType 名を選択し、それらは var iType に格納されますが、コードを実行すると、最初の "foreach" 反復が最初の issueType 名で resultSet を変更し、2 番目の反復が完了すると、resultSet が一致しないため、resultSet に null が含まれます2 番目の IssueType Name となるため、resultSet は null になります。

元のresultSetを変更せずにresultSetを照会して、選択された複数のIssueType Namesの対応するデータがresultSetに含まれるようにする方法を知りたいです。この点であなたの助けは非常に高く評価されています.

4

2 に答える 2

0

問題は、述語を追加することです。これは に変換されANDます。を使用Containsすると、次と同じセマンティクスが得られますOR

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

(注:foreachループなし)

于 2012-05-31T18:02:32.527 に答える
0

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

うまくいけば、これは役に立ちます。

于 2012-05-31T11:54:09.143 に答える