Linq中Lambda表达式类外字段的Where子句

Linq中Lambda表达式类外字段的Where子句,linq,Linq,如果我要使用以下代码将产品选择到一个名为products的类中,我如何才能添加Where子句enabled=true而不将其添加到类products中 List<Products> lp = db.products.Select(product => new Products { Name = product.name, Description = product.description,

如果我要使用以下代码将产品选择到一个名为products的类中,我如何才能添加Where子句enabled=true而不将其添加到类products中

        List<Products> lp = db.products.Select(product => new Products
        {
            Name = product.name,
            Description = product.description,
            Category = product.Category
        }).ToList();
Adding.Wherex=>x.enabled==true不起作用,因为enabled不是Products类的一部分,只是Products表的一部分

这也是一个很好的实践建议,我用单数形式命名这个类,Product


这也是一个很好的实践建议,我会用单数形式将类命名为Product。

我假设您尝试过过滤产品列表而不是表。所以你不必预先准备Where。这还有一个优点,即在数据库中而不是内存中进行过滤

List<Products> lp = db.products
.Where(p => p.enabled)
.Select(product => new Products
{
    Name = product.name,
    Description = product.description,
    Category = product.Category
}).ToList();

旁注:您应该遵循.NET命名约定。例如,使用pascal大小写属性或类名。一个类通常应该是单数的,如果您想要它的多个类型,请使用一个列表。

我假设您已经尝试过过滤产品列表而不是表。所以你不必预先准备Where。这还有一个优点,即在数据库中而不是内存中进行过滤

List<Products> lp = db.products
.Where(p => p.enabled)
.Select(product => new Products
{
    Name = product.name,
    Description = product.description,
    Category = product.Category
}).ToList();

旁注:您应该遵循.NET命名约定。例如,使用pascal大小写属性或类名。一个类通常应该是单数的,如果您想要它的类型的多个,请使用列表。

或者更好,我建议使用x=>x.enabled。如果可以的话,我不喜欢比较布尔真/假值。或者更好,我建议使用x=>x.enabled。如果我可以帮助的话,我不喜欢与布尔真/假值进行比较。如果enabled不是db.products类实例的成员,恐怕你不能做你想做的事情如果enabled不是db.products类实例的成员,我担心你不能做你想做的事。对不起,我是在末尾而不是在正确的位置添加的。@Dave:即使产品具有该属性,这也是非常低效的,因为你会在开始筛选之前将所有产品加载到内存中。很抱歉,我是在末尾而不是在正确的位置添加的。@Dave:那也是即使产品具有该属性,效率也会非常低,因为在开始过滤之前,您会将所有产品加载到内存中。谢谢您的良好实践建议。显然我还在学习。谢谢你的建议。显然我还在学习。一段代码并不是一个很有用的答案。请在你的问题中添加一段文字,解释为什么你的代码可以解决这个问题?一段代码并不是一个很有用的答案。请在问题中添加一段文字,解释代码修复问题的原因?
    List<Products> lp = db.products
        .Where(p => p.enabled)
        .Select(product => new Products
        {
            Name = product.name,
            Description = product.description,
            Category = product.Category
        }).ToList();
List<Products> lp = db.products
.Where(p => p.enabled)
.Select(product => new Products
{
    Name = product.name,
    Description = product.description,
    Category = product.Category
}).ToList();
var filter1 = Enumerable.Range(0, 50).Where(c => c % 2 == 0).Select(c => c).ToList();

Console.WriteLine(filter1[3]);

filter1.Insert(4, 13);

foreach (var v in filter1)
{
  Console.WriteLine(v);
}