C# 如何在EntityFramework/linq中使用条件顺序

C# 如何在EntityFramework/linq中使用条件顺序,c#,linq,optimization,entity-framework-core,C#,Linq,Optimization,Entity Framework Core,每当我有许多选项可供排序和筛选时,在我的存储库中我都会使用“切换”来决定,但代码非常重复。 如何使用密码顺序删除重复代码? 你有什么办法来优化这段代码 示例代码: IEnumerable产品; 交换机(订购方) { 案例“创建”: products=\u GFazContext.products //…许多情况如下: .Where(r=>(productId==null | | r.productId==productId))//重复代码 .Where(r=>(groupId==null | |

每当我有许多选项可供排序和筛选时,在我的存储库中我都会使用“切换”来决定,但代码非常重复。
如何使用密码顺序删除重复代码? 你有什么办法来优化这段代码

示例代码:

IEnumerable产品;
交换机(订购方)
{
案例“创建”:
products=\u GFazContext.products
//…许多情况如下:
.Where(r=>(productId==null | | r.productId==productId))//重复代码
.Where(r=>(groupId==null | | r.groupId==groupId))//重复代码
.Where(r=>(statusId==null | | r.statusId==statusId))//重复代码
//关于订单的条件
。其中(r=>(data1==null | | r.CreateDate>=data1))
.Where(r=>(data2==null | | r.CreateDate r.Group)//重复代码
//特定顺序
.OrderBy(p=>p.CreateDate)
.Skip(pagination.SkipRecords)//重复代码
.Take(pagination.PageSize);//重复代码
打破
案例“更新”:
products=\u GFazContext.products
//…许多情况如下:
.Where(r=>(productId==null | | r.productId==productId))//重复代码
.Where(r=>(groupId==null | | r.groupId==groupId))//重复代码
.Where(r=>(statusId==null | | r.statusId==statusId))//重复代码
//关于订单的条件
。其中(r=>(data1==null | | r.LastUpdate>=data1))
.Where(r=>(data2==null | | r.LastUpdate r.Group)//重复代码
//具体订单
.OrderBy(p=>p.LastUpdate)
.Skip(pagination.SkipRecords)//重复代码
.Take(pagination.PageSize);//重复代码
打破;打破;
违约:
products=\u GFazContext.products
//…许多情况如下:
.Where(r=>(productId==null | | r.productId==productId))//重复代码
.Where(r=>(groupId==null | | r.groupId==groupId))//重复代码
.Where(r=>(statusId==null | | r.statusId==statusId))//重复代码
//关于订单的条件
其中(r=>(数据1==null | | r.ReleaseDate>=data1))
.Where(r=>(data2==null | | r.ReleaseDate r.Group)//重复代码
//具体订单
.OrderBy(p=>p.ReleaseDate)
.Skip(pagination.SkipRecords)//重复代码
.Take(pagination.PageSize);//重复代码
打破
}
退货产品;
类似这样的东西

IQueryable<Products> products = _GFazContext.Products
    .Where(r => (productId == null || r.ProductId == productId))
    .Where(r => (groupId == null || r.GroupId == groupId))
    .Where(r => (statusId == null || r.StatusId == statusId));

switch (orderBy)
{
    case "Create":
        products = products
                .Where(r => (data1 == null || r.CreateDate >= data1))
                .Where(r => (data2 == null || r.CreateDate <= data2))
                .Include(r => r.Group)
                .OrderBy(p => p.CreateDate);
        break;
    case "Update":
        products = products
                .Where(r => (data1 == null || r.LastUpdate >= data1))
                .Where(r => (data2 == null || r.LastUpdate <= data2))
                .Include(r => r.Group)
                .OrderBy(p => p.LastUpdate);
        break;
    default:
        products = products
                .Where(r => (data1 == null || r.ReleaseDate >= data1))
                .Where(r => (data2 == null || r.ReleaseDate <= data2))
                .Include(r => r.Group)
                .OrderBy(p => p.ReleaseDate);
        break;
}
products = products
    .Skip(pagination.SkipRecords)
    .Take(pagination.PageSize);

return products;
IQueryable products=\u GFazContext.products
.其中(r=>(productId==null | | r.productId==productId))
.其中(r=>(groupId==null | | r.groupId==groupId))
其中(r=>(statusId==null | | r.statusId==statusId));
交换机(订购方)
{
案例“创建”:
产品=产品
。其中(r=>(data1==null | | r.CreateDate>=data1))
.Where(r=>(data2==null | | r.CreateDate r.Group)
.OrderBy(p=>p.CreateDate);
打破
案例“更新”:
产品=产品
。其中(r=>(data1==null | | r.LastUpdate>=data1))
.Where(r=>(data2==null | | r.LastUpdate r.Group)
.OrderBy(p=>p.LastUpdate);
打破
违约:
产品=产品
其中(r=>(数据1==null | | r.ReleaseDate>=data1))
.Where(r=>(data2==null | | r.ReleaseDate r.Group)
.OrderBy(p=>p.ReleaseDate);
打破
}
产品=产品
.Skip(分页.skipprecords)
.Take(分页.页面大小);
退货产品;
试试这个-

IEnumerable<Products> products;

products = _GFazContext.Products
           .Where(r => (productId == null || r.ProductId == productId))
           .Where(r => (groupId == null || r.GroupId == groupId))
           .Where(r => (statusId == null || r.StatusId == statusId))  
                                                                                        
           .Where(r => orderBy == "Create" ? (data1 == null || r.CreateDate >= data1) : (orderBy == "Update" ? (data1 == null || r.LastUpdate >= data1) : (data1 == null || r.ReleaseDate >= data1)))
           .Where(r => orderBy == "Create" ? (data2 == null || r.CreateDate <= data2) : (orderBy == "Update" ? (data2 == null || r.LastUpdate <= data2) : (data2 == null || r.ReleaseDate <= data2)))
           .Include(r => r.Group)    

                         //Specific order      
           .OrderBy(p => orderBy == "Create" ? p.CreateDate : (orderBy == "Update"?  p.LastUpdate : p.ReleaseDate))
           .Skip(pagination.SkipRecords)
           .Take(pagination.PageSize);
IEnumerable产品;
products=\u GFazContext.products
.其中(r=>(productId==null | | r.productId==productId))
.其中(r=>(groupId==null | | r.groupId==groupId))
.其中(r=>(statusId==null | | r.statusId==statusId))
其中(r=>orderBy==“Create”“(data1==null | | | r.CreateDate>=data1):(orderBy==“Update”“(data1==null | | r.LastUpdate>=data1):(data1==null | | r.ReleaseDate>=data1))
.Where(r=>orderBy==“Create”?(data2==null | | r.CreateDate