【问题标题】:C# lamba expression to select elementsC# lambda 表达式来选择元素
【发布时间】:2019-12-14 09:09:21
【问题描述】:

我有一个类别列表(字符串)和一个特定类型的对象列表。我只需要从这个对象列表中选择那些属性在我的类别列表中的对象。

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

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

不能将类型'string'隐式转换为'bool'

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

我希望返回一个子列表,其中包含属性 Name 是我的列表类别成员的对象。

【问题讨论】:

  • x => categories.Contains(x.Program.Name)?
  • @juharr 我也试过了!但它不是过滤,而是返回整个对象列表:(
  • @JéssicaCarneiro 您能否发布一个示例数据集,其中包含您在输出中获得的内容。没有立即看到问题
  • 你可能想要这样的东西:var entries = programmes.Where(x => categories.Any(w => x.Program.Name == w));
  • categories 中的值是什么? programmes 中是否有任何条目具有不在 categories 中的 Program.Name?还有categories是什么,是List<string>吗?

标签: c# functional-programming


【解决方案1】:

在这种情况下你可以使用 Contains

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

仅选择 x.Program.Name 所在的元素到类别列表中

【讨论】:

    【解决方案2】:

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

    应该这样做。

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

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

    把它们放在一起,你就可以在条目中包含任何匹配的程序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多