LINQ语句优化
本文关键字:优化 语句 LINQ | 更新日期: 2023-09-27 18:11:07
var person = People.SingleOrDefault(p => p.Name == parameter);
SelectedPerson = person ?? DefaultPerson
可以用一个语句写出来吗?测量我是否可以提供SingleOrDefault
返回的默认元素?
我正在寻找这样的东西(第二个参数是我提供的默认元素)。
var person = People.SingleOrDefault(p => p.Name == parameter, DefaultPerson);
解决方案也应该适用于值类型(int, double, enum, struct,…)
可以使用DefaultIfEmpty():
var person = People.Where(p => p.Name == parameter).DefaultIfEmpty(DefaultPerson).Single();
你可以定义一个扩展:
public static T SingleOrDefault<T>
(this IEnumerable<T> list, T defaultValue)
where T : class
{
return list.SingleOrDefault() ?? defaultValue;
}
,然后用:
var person = People.SingleOrDefault(p => p.Name == parameter, DefaultPerson);
这有点明显,但这对您有用吗?
var person = People.SingleOrDefault(p => p.Name == parameter) ?? DefaultPerson;
您可以创建一个扩展方法,如果没有找到,它会给您一个实例:
public static class PersonExtensionMethod
{
public static T SingleOrInstance<T>(this IEnumerable<T> source, Func<T, bool> precate)
{
var person = source.SingleOrDefault(precate);
if (person == null)
return (T)Activator.CreateInstance(typeof(T));
return person;
}
}
,并像这样命名:
List<Person> persons = new List<Person> { new Person(), new Person(), new Person() };
var foundPerson = persons.SingleOrInstance<Person>(p => p.Name == "bla");