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