2012-04-04 102 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();