我试图尽可能地将业务逻辑中的android分离出来,以加快速度。
在代码周围点缀我有一段看起来像这样的LINQ
var jobItemDoneTest = JobItemsData.GetJobIfDone(wheelpos, theOrder.GetOrderItemStockItemID);
var jobsDoneList = new JobItemsData(theOrder.OrderData.jobItemsID).JobItemDone;
var stillToDo = theOrder
.OrderItemsData
.Where(p => jobsDoneList.All(p2 => p2.orderItemStockItemID != p.orderItemStockItemID))
.Where(t => !t.description.Contains("2hr"))
.Where(t => !t.description.Contains("Staff"))
.ToList();
换句话说,在两个列表之间进行比较以过滤掉一些结果。
我要做的是删除它的实例以在业务对象类中创建泛型方法。
到目前为止,我已经有了这个
public List<T> GetWorkStillToDo<T, U>(List<T> orderItems, List<U> jobItems, params object[] searchList1, string searchList2)
{
var stillToDo = orderItems.Where(p=>jobItems.Add(p2=>p2.orderItemStockItemID != p.orderItemStockItemID);
}
问题在于,如果我想搜索p =&gt;的不同属性和p2=>
,然后筛选where条件,我迷路了,无法想到在searchList
对象数组中从n = 1迭代到n的方法并将它们包含在LINQ中
是
p2=>searchList[0].ToString() != searchList2
LINQ中允许,如何创建查询的Where部分?
答案 0 :(得分:0)
LINQ中的子句是Func<object, bool>
对象,如果您有明确定义的规则,则object
可以是通用的。构造语法只是一个普通的lambda。所以:
Func<object, bool> where = obj => obj.Propery == delta;
return someEnumOrList.Where(where);
将此包装到参数中可让您对项目进行即时查询。您可能需要提供一个扩展方法,例如WhereAll
,它接受一组Func<>
个对象并检查它们。一个想法是:
public static IEnumerable<T> WhereAll(this IEnumerable<T> enumerable, Func<object, bool>[] clauses)
{
var result = enumerable;
foreach(var c in clauses)
{
result = result.Where(c);
}
return result;
}