如何在EF中由IList过滤数据库记录

时间:2014-03-22 17:38:57

标签: entity-framework select filter ilist

db包含具有多对多关系的产品和颜色表。 因此,该产品具有IList<Colors>属性。 例如,我创建了一个IList,其中包含两个colors,我希望获得productsColors包含其他IList的{​​{1}}。 这是可能的还是我应该首先获得所有产品,然后通过foreach过滤它们?

产品:

public class Product
{
    public Product()
    {
        Colors = new List<Color>();
    }
    public int Id { get; set; }
    public string Name { get; set; }
    public string Code { get; set; }
    .
    .
    .
    public virtual ICollection<Color> Colors { get; set; }

}

颜色

public class Color
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string HexCode { get; set; }
    public virtual ICollection<Product> Products { get; set; }
}

现在我想要颜色ID为2或3的产品,这些数字是动态的

1 个答案:

答案 0 :(得分:1)

假设您在列表colorIds中有颜色ID,那么您可以

var query = from p in Products
            where p.Colors.Any(c => colorIds.Contains(c.Id))
            select p

这将返回至少所请求颜色的产品。如果您需要这些颜色的产品,您可以将Any更改为All