使用c#linq清除代码

时间:2017-06-18 17:17:56

标签: c# linq

我有一个很大的过滤器表单,只有在用户填写字段时才需要添加条件。

我目前的代码是这样的:

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方法重构,则会出现错误:

  

提取方法失败,原因如下:

     

参数的类型或返回类型不能是匿名类型:[查询,返回类型]

2 个答案:

答案 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