LINQ语句优化

Wol*_*ler 2 c# linq

var person = People.SingleOrDefault(p => p.Name == parameter);
SelectedPerson = person ?? DefaultPerson
Run Code Online (Sandbox Code Playgroud)

这可以写在一个声明中吗?我可以提供measing SingleOrDefault返回的默认元素吗?

我正在寻找像这样的东西(第二个参数是我提供的默认元素).

var person = People.SingleOrDefault(p => p.Name == parameter, DefaultPerson);
Run Code Online (Sandbox Code Playgroud)

该解决方案还应适用于值类型(整数,双精度数,枚举数,结构数......).

Kir*_*nov 7

您可以使用DefaultIfEmpty():

var person = People.Where(p => p.Name == parameter).DefaultIfEmpty(DefaultPerson).Single();
Run Code Online (Sandbox Code Playgroud)

  • `DefaultIfEmpty`仍然返回`IEnumerable`,因此需要另一个`First()`.但是,是的,这就是我在寻找的东西!谢谢 (2认同)