我有一个很大的过滤器表单,只有在用户填写字段时才需要添加条件。
我目前的代码是这样的:
var query = (from a in ....
join b in ...
join c in ...
select new {a, b, c});
if (field1 != null)
{
query = query.where(x => x.a.Field == field1);
}
... and so on for every field
我正在寻找一种方法来创建一些方法来简化代码:
query = AddField1Condition(field1, query); //or anything like this...
如何编写这样的方法? 如果我尝试使用extract方法重构,则会出现错误:
提取方法失败,原因如下:
参数的类型或返回类型不能是匿名类型:[查询,返回类型]
答案 0 :(得分:3)
public static IQueryable<T> AddField1Condition(this IQueryable<T> query, string f1) where T:something
{
if (f1==null)
return query;
return query.Where(x=>x.a.Field1 == f1);
}
用过:
query = query.AddField1Condition(field1);
答案 1 :(得分:1)
您不需要额外的{-# INLINE (!) #-}
条件。您可以尝试以下内容:
if