如何检查列表中的项目或可消除的模板在linq中不为null

时间:2013-12-06 22:12:41

标签: c# linq

如果我有一个方法,我有一个请求和一个模板列表。如何删除引用任何模板的列表中的空项?请参阅下面的代码。

由于我不知道类型我不能检查特定参数,除非该参数有一个我可以参考的类型。

public List<T> ListTest(MyRequest request, IEnumerable<T> mylist)
{
  var stuff = GetStuff(request);
  var noNullList = mylist.AsQueryable().Where(item != null);  // <-- Error
  return noNullList;
}

3 个答案:

答案 0 :(得分:4)

错误的行应为

var noNullList = mylist.AsQueryable().Where(item => item != null).ToList();

另外,您使用AsQueryable()的原因是什么?

由于mylist实现IEnumerable接口,您可以说

var noNullList = mylist.Where(item => item != null).ToList();

答案 1 :(得分:3)

你很亲密。您缺少lambda表达式中的项目:

public List<T> ListTest(MyRequest request, IEnumerable<T> mylist)
{
  var stuff = GetStuff(request);
  var noNullList = mylist.AsQueryable().Where(item => item != null).ToList();  // <-- Error
  return noNullList;
}

答案 2 :(得分:2)

你只需要Where扩展方法的另一个参数:它需要一个Expression<Func<T, bool>>,而不仅仅是一个布尔值。

如果您不使用AsQueryable(),则为Func<T, bool>,但会“看起来一样”。

Where(m => m != null)