2015-04-29 192 views
-3

我有一個對象列表,我需要對它執行LINQ查詢以查找某個特定對象。LINQ - 查詢不返回對象列表中的對象

class MyClass 
{ 
    int id; 
    int someOtherIdbutNotUnique; 
} 

var ls = myObjectList.Where(x => x.id==specificId 
          && x.someOtherIdbutNotUnique == someOtherSpecificId) 
        .FirstOrDefault(); 

但是這個查詢不返回MyClass對象。另外,我應該如何更改查詢以獲取滿足給定條件的MyClass對象列表。同時,想知道是否有任何好的LINQ教程可以從頭開始。

+4

創建一個能夠重現問題的小樣本。我們不知道'myObjectList'是什麼,'FirstOrDefaults'不是已知的擴展方法。你也可能想解釋一下這個代碼返回什麼_does_,或者什麼是'ls',你期望它是什麼。 – CodeCaster

+0

抱歉...「myobjectList」是「MyClass」對象的列表。希望現在清楚 –

+1

@CodeCaster'FirstOrDefaults'可能不是已知的,但可以認爲是'FirstOrDefault'。特別是當他說「但這個查詢不返回一個MyClass對象」 –

回答

0

LINQ擴展方法帶謂詞來過濾列表。 Where,First, FirstOrDefault,Single,SingleOrDefault(僅舉幾例)都採用相同的謂詞。

一些Lambda表達式,用於過濾列表。

public class MyClass 
{ 
    public int Id {get;set;} 
    public int Other {get;set;} 
} 

// myClasses is a populated list <-- this needs to be checked. 
var result = myClasses.FirstOrDefault(x => x.Id == specificId && x.Other == specificOther); 

Result現在應該包含一個單一MyClass實例或null

如果您省略了OrDefault(),那麼如果代碼找不到與謂詞匹配的實例,則會引發錯誤。

如果謂詞返回多個項目,則First將選取第一個項目。如果將First替換爲Single,並且謂詞返回多個項目,則會引發異常。


檢查事項

  1. 名單正在執行的查詢對有實例的列表。

  2. 變量specificIdspecificOther具有存在於列表中的值。你想要做的最後一件事是想知道爲什麼它沒有返回任何東西,實際上它正在按照你的要求做,而失敗的原因是你用來查詢哪裏錯誤的值。

+0

@joe是的,我不完全確定如何說實話。 –

+1

@Joe我編輯它,看看它現在是否更有意義。 –

+0

現在更清楚了。 – Joe