如果在OrderBy方法中声明Where方法

时间:2015-12-10 07:45:24

标签: c# .net linq

我在下面写了一些代码:

public IEnumerable<Photo> GetPhotos(int page, int pageSize, string userId = null, OrderBy orderBy = OrderBy.TimeOfCreation)
{
   var c = Database.Set<Photo>().Where(p => string.IsNullOrEmpty(userId) || p.ClientProfileId == userId);
   c = orderBy == OrderBy.TimeOfCreation ? 
       c.OrderBy(p => p.TimeOfCreation).Skip((page - 1) * pageSize).Take(pageSize) : 
       c.OrderBy(p => p.AverageRaiting).Skip((page - 1) * pageSize).Take(pageSize);
   return c
}

是否可以在一个语句中完成所有操作并摆脱重复的代码?

2 个答案:

答案 0 :(得分:4)

您可以将OrderBy结果分配回同一个变量:

var c = Database.Set<Photo>().Where(p => string.IsNullOrEmpty(userId) || p.ClientProfileId == userId);
c = orderBy == OrderBy.TimeOfCreation 
                      ? c.OrderBy(p => p.TimeOfCreation)
                      : c.OrderBy(p => p.AverageRaiting);

return c.Skip((page - 1) * pageSize).Take(pageSize)

答案 1 :(得分:2)

您可以在value内移动条件:

OrderBy