linq orderby查询if语句

Dav*_*ett 0 c# linq

我正在尝试做一些代码,基本上说是做搜索,如果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}
}
Run Code Online (Sandbox Code Playgroud)

以上代码是我尝试完成此操作.它不起作用,因为查询不存在于if上下文之外,这显然是坏的!而且我很确定代码违反了干法原则.有人能看到更好的方式吗?谢谢.

Dmi*_*ets 5

您可以根据需要在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});
Run Code Online (Sandbox Code Playgroud)