【问题标题】:using the ! (NOT) operand in Linq's Where() method for c#使用 ! (NOT) 用于 c# 的 Linq 的 Where() 方法中的操作数
【发布时间】:2015-03-30 11:54:00
【问题描述】:

我在数据库中有大量水果。

其中一些水果尚未完成,即它们缺少有关它们的一些细节,例如颜色、质地、大小等。在这种情况下,缺少的属性是颜色。

使用 linq 的 Where() 方法我很确定我可以过滤掉所有这些 没有颜色的水果并将它们作为集合返回 水果。

问题是我不确定语法是如何工作的,出于某种原因我 得到的问题虽然fruitsfruitfinder.fruits 都是 Fruit 集合存在隐式转换问题。

FruitCollection fruits = null;

//Initializing the fruits collection here
//What I want is to only retrive the fruits which have a color
fruits = fruitFinder.fruits.Where( f => f.color != null );

这只是一个示例,但此处提供的答案使问题保持​​一般性,并且可以回答我的具体问题。

【问题讨论】:

  • Where 返回 IEnumerable<Fruit> 而不是 FruitCollection。您需要FruitCollection 吗?如果是这样,请提供一个采用IEnumerable<Fruit> 的构造函数。然后在此处使用foreach 填写您的收藏。
  • @Tim 感谢您的输入,我通过转换为列表并将列表作为参数传递了类似的方式。
  • 也许是主观的,但我更喜欢采用IEnumerable<Fruit> 的构造函数,因为它允许任何种类的水果作为输入(例如Fruit[])。然后你可以在那里使用fruits.ToList()

标签: c# linq where


【解决方案1】:

fruits 将是 IEnumerable<Fruit> 而不是 FruitCollection 像这样:

IEnumerable<Fruit> fruits = fruitFinder.fruits.Where( f => f.color != null );

我假设水果类型是Fruit,但你明白了。

【讨论】:

  • 然后我可以将 IEnumerable 转换为一个水果集合吗?
  • 没有。但你真的需要吗?
  • @KyleT No :-) 但通常SomethingCollection 有一个接受IEnumerable 和/或AddRange(...) 的构造函数
  • 是的,如果可能的话 Id 真的希望能够从 IEnumerable 创建一个集合,因为集合类型在整个应用程序的其余部分中被重用。感谢您的意见,这确实帮助我了解自己做错了什么。
猜你喜欢
  • 1970-01-01
  • 2014-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-26
  • 1970-01-01
  • 2011-10-03
相关资源
最近更新 更多