2016-03-09 71 views
-3

我有一個自定義類型的通用列表,其中我試圖找回一個類型的實例。我已經嘗試了「FirstOrDefault」和「Where」兩個條件,這兩個條件都是真實的,但它們都給了我相同的錯誤信息(「操作符'& &'不能應用於'lambda表達式'類型的操作數'和 'lambda表達式'「)如何根據兩個條件從通用列表中獲取項目?

在這裏,他們是:

// FirstOrDefault 
UnitItemCodeItemID uicii = 
    unitItemCodeItemIDList 
     .FirstOrDefault((u => u.Unit == _unit) && (d => d.Description == desc)); 


// Where 
UnitItemCodeItemID uicii = 
    unitItemCodeItemIDList 
     .Where((u => u.Unit == _unit) && (d => d.Description == desc)); 

我不知道這是否是相關的,但是類是:

public class UnitItemCodeItemID 
{ 
    public string Unit { get; set; } 
    public string Description { get; set; } 
    public string ItemCode { get; set; } 
    public int ItemID { get; set; } 
} 
+2

'&&'進入lambda:'.FirstOrDefault(u => u.Unit == _unit && u.Description == desc);' – DavidG

+0

@DavidG儘量避免在評論中張貼答案。即使它是一行代碼,答案也是一個答案! :-) –

+3

@GediminasMasaitis我知道我在做什麼,我已經在這裏呆了很長一段時間(檢查我的代表...),但我不認爲這個問題值得一個完整的答案。 – DavidG

回答

5

你必須只提供一個拉姆達:

UnitItemCodeItemID uicii = unitItemCodeItemIDList 
    .FirstOrDefault(obj => obj.Unit == _unit && obj.Description == desc); 

想想這樣說:這是完全一樣的功能編寫foreach循環。像這樣:

public UnitItemCodeItemID ExtractFirst(IEnumerable<UnitItemCodeItemID> unitItemCodeItemIDList) 
{ 
    foreach(var obj in unitItemCodeItemIDList) 
    { 
     if (obj.Unit == _unit && obj.Description == desc) 
      return obj; 
    } 
    return null; 
} 

你蘭巴必須提供的「如果」的一部分,其餘的是在Linq的執行。

2

您需要提供一個單一的λ表達式封裝了兩個條件

.Where(p => p.Unit == _unit && p.Description == desc); 

您之前的嘗試嘗試將兩個單獨的lambda表達式與and語句組合在一起。

相關問題