我在理解 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; }
}
希望这会有所帮助。