我正在尝试做一些代码,基本上是做搜索,如果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上下文之外,这显然是坏的!而且我很确定代码违反了干法原则。有人能看到更好的方式吗?感谢。
答案 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 });