我发现自己写了很多这样的代码来选择一个匹配的项目
var item = (from x in Items where x.Id == 123 select x).First();
是否有更简洁的方法,或者这是否像我将要得到的那样简洁?
编辑:应该说“使用 linq 语法的更简洁的方式”。我已经知道 lambda 语法,而且看起来这实际上是唯一的方法。不过,我确实得到了一些有用的信息,所以感谢所有回复的人。
最佳答案
取决于你对 linq 查询语法的喜欢程度,你可以直接使用扩展方法,如:
var item = Items.First(i => i.Id == 123);
如果您不想在列表为空时抛出错误,请使用 FirstOrDefault
返回元素类型的默认值(null
用于引用类型):
var item = Items.FirstOrDefault(i => i.Id == 123);
if (item != null)
{
// found it
}
Single()
和 SingleOrDefault()
也可以使用,但是如果你正在从数据库中读取或者已经保证唯一性的东西,我不会打扰它必须扫描列表以查看是否有任何重复和抛出。 First()
和 FirstOrDefault()
在第一次匹配时停止,因此效率更高。
在 First()
和 Single()
家族中,这里是它们抛出的地方:
First()
- 如果为空/未找到则抛出,如果重复则不抛出FirstOrDefault()
- 如果为空/未找到则返回默认值,如果重复则不抛出Single()
- 如果为空/未找到则抛出,如果存在重复则抛出SingleOrDefault()
- 如果为空/未找到则返回默认值,如果存在重复则抛出
关于c# - 用于选择一项的 Linq 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7809745/