我有一个Foo
类型的对象的列表,以及Foo
类型的对象的另一个实例。我想用linq来根据实例的非null属性过滤列表。Linq:基于类型A的对象的类型A的过滤器列表?
class Foo {
public int ID;
public string Description;
public long Location;
}
Foo fooFilter = new Foo() {
ID = null,
Description = null,
Location = 1
}
List<Foo> fooList = new List<Foo>();
fooList.Add(new Foo(){ID = 1, Description = "one", Location = 1});
fooList.Add(new Foo(){ID = 2, Description = "two", Location = 0});
fooList.Add(new Foo(){ID = 3, Description = "three", Location = 1});
List<Foo> filteredFooList = fooList.Where(???);
我想以某种方式使用fooFilter
查询fooList
,并填写filteredFooList
:
[
{ID = 1, Description = "one", Location = 1},
{ID = 3, Description = "three", Location = 1}
]
编辑:
我想简短使问题更加清晰,但我可能留下了重要的信息。在我的实际程序中,List<Foo>
是一个来自数据库的大型结果(超过40k条目)。我试图制作一个控制器方法(MVC),它可以采用任何与实体框架对象的字段名称相匹配的参数组合。所以<Foo>
是EF记录类型。所以我想,以避免明确列出所有可以在控制器中过滤的(15个左右)字段:
public class Home : Controller
{
public ActionResult FilteredFooList(int ID, string Description, long Location, etc, etc, etc)
{
}
}
,做更多的东西一样:
public class Home : Controller
{
public ActionResult FilteredFooList(Foo filterObj)
{
}
}
也许这是不可能的或一个好主意?
你的fooFilter不是一个过滤器,它是一个Foo对象。过滤器谓词是一个表达式,其值为true或false,对吗? – elgonzo
'.ID'和'.Location'不能为null,因为它们是值类型。你打算如何处理值类型? – NetMage
确实,'fooFilter'是一个考试程序,用于通过示例进行查询,例如System.DirectoryServices.AccountManagement.PrincipalSearcher如何工作。 – NetMage