2016-03-09 52 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语句组合在一起。

相关问题