我想获取包含在另一个表中但被列 ID 过滤的表的数据,该列 ID 与另一个表具有另一个实现
在下面我写了细节
产品表(仅写入需要的列(
public partial class Products
{
public int ProductID { get; set; }
public string ProductName { get; set; }
public int GroupID { get; set; }
public virtual ICollection<Product_Attribut> Product_Attribut { get; set; }
}
Attribute_Item表
public partial class AttributItem
{
public int AttributeID { get; set; }
public int AttrGrpID { get; set; }
public string Name { get; set; }
public virtual ICollection<Product_Attribut> Product_Attribut { get;set; }
}
Product_Attribut表
public partial class Product_Attribut
{
public int ID { get; set; }
public Nullable<int> ProductID { get; set; }
public Nullable<int> AttributeID { get; set; }
public Nullable<bool> isChecked { get; set; }
public string Value { get; set; }
public virtual AttributItem AttributItem { get; set; }
public virtual Products Products { get; set; }
}
表是乘积,Attribute_Item,Product_Attribut Product_Attribut与这两个表有 1:m 的关系,这意味着两个 1:m 的关系
现在我想获取产品数据表,其中Product_Atrribute应该有一行带有产品 ID 和属性 ID,其中属性 ID 按过滤器 ID 过滤
products = products.Include(pr => pr.Product_Attribut.Select(x => x.AttributeID == Convert.ToInt32(eachfilt[1])));
我使用了这段代码,但我知道这是错误的并得到错误,但不知道如何到达它? 我是否需要连接两个表,或者只有另一种简单的方法 只使用 Linq?
样本
product rows
product_id
1
2
3
4
5
AttributItem rows
attribute_id
11
12
13
现在Product_Attribut表中有这些行
product_id attribute_id
1 11
2 11
2 12
3 12
当我将attribute_id过滤器设置为 11 时,我希望输出是只有产品 1 和 2 的产品表,而不是(3,4 和 5(
var products = db.Products.Include(p => p.Product_Groups);
products = products.Include(p => p.Product_Attribut).Where(x => x.Product_Attribut.Any(p => p.AttributeID == filter));
你可以检查下面的代码来获取这个东西。 您有一对多的关系,因此我们可以Product_Attribut属性借助 linq where 子句过滤数据,然后使用匿名函数或示例中存在的类选择用户想要的内容。
Products product = new Products();
Product_Attribut attribute = new Product_Attribut();
attribute.ProductID = 1;
attribute.AttributeID = 11;
Product_Attribut attribute1 = new Product_Attribut();
attribute1.ProductID = 2;
attribute1.AttributeID = 11;
Product_Attribut attribute2 = new Product_Attribut();
attribute2.ProductID = 2;
attribute2.AttributeID = 12;
Product_Attribut attribute3 = new Product_Attribut();
attribute3.ProductID = 3;
attribute3.AttributeID = 12;
Product_Attribut attribute4 = new Product_Attribut();
attribute4.ProductID = 4;
attribute4.AttributeID = 14;
product.Product_Attribut = new List<Product_Attribut>();
product.Product_Attribut.Add(attribute);
product.Product_Attribut.Add(attribute1);
product.Product_Attribut.Add(attribute2);
product.Product_Attribut.Add(attribute3);
product.Product_Attribut.Add(attribute4);
var filter = product.Product_Attribut.Where(x => x.AttributeID == 11).Select(x => new Product_Attribut
{
ProductID = x.ProductID,
AttributeID = x.AttributeID
}).ToList();