if语句内的Linq顺序查询

本文关键字:顺序 查询 Linq 语句 if | 更新日期: 2023-09-27 18:11:20

我试着做一些代码基本上说做搜索,如果orderByLastName为真按姓氏排序如果为假按名字排序

if(orderByLastName)
{
    var query = from p in db.People
                orderby p.LastName
                select new {Name = p.FirstName + " " + p.LastName}
}
else
{
     var query = from p in db.People
                orderby p.FirstName
                select new {Name = p.FirstName + " " + p.LastName}
}

上面的代码是我尝试完成这一点。它不起作用,因为查询不存在于if上下文之外,这显然是不好的!而且我很确定代码违反了干燥原则。有人能想出更好的办法吗?谢谢。

if语句内的Linq顺序查询

你可以在IQueryable集合上运行任意多的查询,所有的查询都将在你第一次转换为IEnumerable的地方执行。

var query = db.People;    
if(orderByLastName)
{
     query  = query.OrderBy(t=>t.LastName)
}
else
{
     query  = query.OrderBy(t=>t.FirstName)
}
var result = query.Select(t=> new {Name = t.FirstName + " " + t.LastName});

这是另一个解决方案:

Func<PeopleType, string> orderby;
if(orderByLastName)
        orderby = t => t.LastName;
else
        orderby = t => t.FirstName;
var result = db.People.OrderBy(orderby).Select(t => new { Name = t.FirstName + " " + t.LastName });