C# OrderBy方法中的If语句在Where方法上

C# OrderBy方法中的If语句在Where方法上,c#,.net,linq,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 ==

我在下面写了一些代码:

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
}
public IEnumerable GetPhotos(int-page,int-pageSize,字符串userId=null,OrderBy-OrderBy=OrderBy.TimeOfCreation)
{
var c=Database.Set().Where(p=>string.IsNullOrEmpty(userId)| | p.ClientProfileId==userId);
c=orderBy==orderBy.TimeOfCreation?
c、 OrderBy(p=>p.TimeOfCreation)。跳过((第1页)*页面大小)。获取(页面大小):
c、 OrderBy(p=>p.AverageRaiting).Skip((第1页)*pageSize.Take(页面大小);
返回c
}

是否可以在一条语句中完成所有操作并消除重复的代码?

您可以将
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)
var c=Database.Set();
c=orderBy==orderBy.TimeOfCreation
? c、 OrderBy(p=>p.TimeOfCreation)
:c.OrderBy(p=>p.AverageRaiting);
返回c.Skip((第1页)*页面大小)。获取(页面大小)

您可以将条件移动到
OrderBy
中:

var c = Database.Set<Photo>().
    Where(p => string.IsNullOrEmpty(userId) || p.ClientProfileId == userId).
    OrderBy(p => orderBy == OrderBy.TimeOfCreation ? p.TimeOfCreation : DateTime.Now).
    ThenBy(p => orderBy == OrderBy.AverageRaiting ? p.AverageRaiting : 0.0).
    Skip((page - 1) * pageSize).Take(pageSize);

return c
var c=Database.Set()。
其中(p=>string.IsNullOrEmpty(userId)| | p.ClientProfileId==userId)。
OrderBy(p=>OrderBy==OrderBy.TimeOfCreation?p.TimeOfCreation:DateTime.Now)。
然后按(p=>orderBy==orderBy.AverageRaiting?p.AverageRaiting:0.0)。
跳过((第1页)*页面大小。获取(页面大小);
返回c

你确定Linq to Entities能够处理吗?@haim770这就是我要问的问题。如果把条件移到里面,它就不起作用了。@haim770,是的,它起作用了。我已经检查了简单字符串类型。@dotctor userId。为什么不呢?我是从方法参数中得到这个值的。@GiorgiNakeuri IDE说“double和System.DateTime之间没有隐式转换。当你说循环代码时,你是指重复代码吗?@dotctor完全正确!已编辑。”。