Silverlight Linq中的延迟查询迭代到实体
我在理解LINQ to Entites查询时遇到了一个问题,该查询没有提供所需的结果。我有以下代码,它应该执行延迟查询并在SilverlightDataGrid中显示结果Silverlight Linq中的延迟查询迭代到实体,silverlight,linq,mvvm,Silverlight,Linq,Mvvm,我在理解LINQ to Entites查询时遇到了一个问题,该查询没有提供所需的结果。我有以下代码,它应该执行延迟查询并在SilverlightDataGrid中显示结果 public List<DispIRTSiteReports> DisplayIRTSiteReportsFilOn(List<IssueTypes> issueType, DateTime fDate, DateTime tDate) { try {
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;
}
public List displayirtsitereptsfilon(List issueType、DateTime fDate、DateTime tDate)
{
尝试
{
var resultSet=来自DataContext.IRT\u Limited\u视图中的项目
选择项目;
var iType=issueType.Select(i=>i.IssueName);//包含多个选定的问题类型名称
如果(issueType.Count!=0)
{
foreach(iType中的变量类型)
{
var copy=type;
resultSet=resultSet.Where(items=>items.Type_Text.Equals(copy));
}
}
var newResultSet=(来自resultSet中的q
其中q.Date\u Time>fDate和q.Date\u Time
}
我选择了多个IssueType名称,它们存储在var iType中,但是当我执行代码时,结果集包含null,因为第一次“foreach”迭代使用第一个IssueType名称更改了结果集,并且当第二次迭代完成时,结果集无法匹配第二个IssueType名称,因此结果集变为null
我想知道如何在不更改原始结果集的情况下查询结果集,以便结果集包含所选多个IssueType名称的相应数据。非常感谢您在这方面提供的帮助。您应该将
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; }
}
希望这会有所帮助。问题是您添加了谓词,这将转换为
和
。如果使用Contains
,则得到与或
相同的语义:
resultSet = resultSet.Where(items => iType.Contains(items.Type_Text));
(注意:无
foreach
loop)是手动添加到元数据的dispirtsiterepts
实体还是生成实体的一部分?dispirtsiterepts是一个包含getter、setter方法(用于IssueType ID和IssueType Name字段)的类Shi GertArnold,您的解决方案工作得很好。但是我无法理解这个解决方案,你能用外行术语解释一下为什么我的代码不起作用,而你的代码起作用(我不理解谓词的意思)。只是想知道我做错了什么。谓词是一个返回布尔值的函数(也称为条件)。所以Where语句中的lambda表达式是一个谓词。如果您制作了一个Where语句链(就像您在foreach中所做的那样),则条件通过和(连词)连接。Contains表示Type_文本在iType中可以有任何值,这与或相同。您好,GertArnold,感谢您的解释。祝你有美好的一天。