c# - 用于选择一项的 Linq 代码

标签 c# linq

我发现自己写了很多这样的代码来选择一个匹配的项目

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/

相关文章:

c# - 动态 LINQ - 无法在 GUID 和字符串之间转换

c# - LINQ to Entities 无法识别方法 'Boolean Contains(Int32)' 方法

c# - 使用 C# Windows Phone 下载加密的二进制文件丢失数据

c# - 在 Web Api 后端加密 Json 结果

c# - 如何创建具有异步功能的类(类似于 SqlCommand 或 WebRequest)?

linq - 递归地 (?) 将 LINQ 谓词组合成单个谓词

c# - 按值(value)分组收藏

c# - 如何解决 值不能为空。参数名称 : source in linq?

c# - 增强 WPF GridView 中特定列的显示

c# - 为什么按 ref 返回对集合元素不起作用?