C#lamba表达式以选择元素

时间:2019-08-06 18:58:13

标签: c# functional-programming

我有一个类别(字符串)列表和某种类型的对象列表。我只需要从该对象列表中选择那些属性属于我的类别列表的对象即可。

我正在尝试在Where方法内使用lamba表达式。我还尝试使用in运算符,但收到以下错误消息:

  

无法将lambda表达式转换为预期的委托类型,因为该块中的某些返回类型不能隐式转换为委托返回类型。

     

无法将类型'string'隐式转换为'bool'

var entries = programmes.Where(x => x.Program.Name in categories);

我希望返回一个带有对象的子列表,这些对象的属性Name是我的列表类别的成员。

2 个答案:

答案 0 :(得分:2)

在这种情况下,您可以使用Contains

var entries = programmes.Where(x => categories.Contains(x.Program.Name)).ToList();

仅选择x.Program.Name位于类别列表中的元素

答案 1 :(得分:1)

var entries = programmes.Where(p => categories.Any(c => p.Program.Name == c));

应该这样做。

categories.Any(...)部分检查是否在类别列表中找到了特定的字符串(在本例中为您的程序名称),如果找到则返回布尔值。

programmes.Where(p...)部分遍历程序中的项目。

将它们放在一起,您可以在枚举项中包含任何具有匹配项的程序。