linq orderby查询if语句

时间:2014-07-04 07:22:28

标签: 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}
}

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

2 个答案:

答案 0 :(得分: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});

答案 1 :(得分:0)

这是另一种解决方案:

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 });