2012-04-04 120 views
0

我有以下查询:LINQ查询不工作

  var req= (from tl in resultlist 
          where (tl.Message.StartsWith("Do not return") && tl.Type == "Int") && 
           (tl.Note.StartsWith("Do no return") && tl.Type == "Ext") 
          select tl).Any(); 

我想看看是否有记录,其中信息与“不返回”开始,类型为“内部” 还有另一个消息注意以“不要回头”开头,类型为“Ext”。

似乎我的查询是错误的,因为没有返回任何东西。

+3

你比较'tl.Type'既“内部”和“外部”,而不是返回结果,除非它是两个(它自然不可能是)为了获得帮助做你真正打算做的事情,我想你需要更详细地解释你想要做的事情。 – 2012-04-04 21:10:35

+0

需要更多的信息,提供的类,你叫什么,EF,NHB,Collections ...我们需要更多的信息。 – CrazyDart 2012-04-04 21:10:56

回答

0
var intMessages = from tl in resultlist 
        where tl.Message.StartsWith("Do not return") 
         && tl.Type == "Int" 
        select tl; 
var extMessages = from tl in resultlist 
        where tl.Message.StartsWith("Do not return") 
         && tl.Type == "Ext" 
        select tl; 

var intAndExtMessages = intMessages.Any() && extMessages.Any(); 

这将确保在结果集中也有一些“不要返回”消息,这些消息在同一个结果集"Int"开始是与“外部”启动一些其他的消息

该函数(查询中的条件)检查源元素是否满足某些要求,因此如果您检查同一对象的类型为“Int”并且“Ext”不可能,因为不能有两个字符串值在同一时间。

另一方面,你需要找出是否在结果列表中存在两个不同类型或两个排他条件的项目,所以这不能在一个迭代中完成(每个LINQ查询都是一个迭代器结束..)。

+0

看起来他正在寻找tl.Note.StartsWith和EXT或tl.Message.StartsWith和INT。根据这个问题,这会给他带来虚假的结果。 – 2012-04-05 18:48:39

+0

@RyanBennett,这里的关键词是“还有另外一条消息” – 2012-04-05 18:50:48

1

您可能想要将该& &更改为||正如上面的评论之一(Joachim Isaksson)所指出的那样。您要求在一个实体上以两种不同方式存在属性(.Type)。这是不可能的。

尝试

req= (from tl in resultlist 
    where (tl.Message.StartsWith("Do not return") && tl.Type == "Int") || 
    (tl.Note.StartsWith("Do no return") && tl.Type == "Ext") 
    select tl).Any();