如何在不使用 linq include 或其他方式加入的情况下获取应在另一个 table 中检查的 table 数据?
how to get a table data where should be checked in another table without joining using linq include or another way?
我想获取 tables 的数据,其中包含在另一个 table 中,但被与另一个 table[=18= 具有另一个关系的列 id 过滤]
在下面我写了细节
products table(只写了需要的列)
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 table
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 table
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; }
}
table是产品,Attribute_Item,Product_Attribut Product_Attribut 与这两个 table 有 1:m 关系,这意味着两个 1:m 关系
现在我想获取 products 数据 table 其中 Product_Atrribute 应该有一行productID 和 AttributeID 其中 AttributeID 由过滤器 ID
过滤
products = products.Include(pr => pr.Product_Attribut.Select(x => x.AttributeID == Convert.ToInt32(eachfilt[1])));
我使用了这段代码,但我知道这是错误的,收到错误消息但不知道如何访问它?我需要加入两个 table 还是仅使用 Linq 的另一种简单方法?
样本
product rows
product_id
1
2
3
4
5
AttributItem rows
attribute_id
11
12
13
现在 Product_Attribut table 有这行
product_id attribute_id
1 11
2 11
2 12
3 12
当我将 attribute_id 过滤器设置为 11 时,我希望输出是产品 table,只有产品 1 和 2 而不是(3,4 和 5)
你可以查看下面的代码来获取这个东西。
你有一对多的关系,所以从 Product_Attribut 属性 我们可以在 linq where 子句的帮助下过滤数据,然后 select 用户想要使用匿名函数或 class present在你的例子中。
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();
这是您获取 table 的数据并在与此 table 具有一对多关系的另一个 table 上进行过滤的方式,结果和输出只是产品 table 和数据作为您想要获得的
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));
我想获取 tables 的数据,其中包含在另一个 table 中,但被与另一个 table[=18= 具有另一个关系的列 id 过滤]
在下面我写了细节
products table(只写了需要的列)
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 table
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 table
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; }
}
table是产品,Attribute_Item,Product_Attribut Product_Attribut 与这两个 table 有 1:m 关系,这意味着两个 1:m 关系
现在我想获取 products 数据 table 其中 Product_Atrribute 应该有一行productID 和 AttributeID 其中 AttributeID 由过滤器 ID
过滤products = products.Include(pr => pr.Product_Attribut.Select(x => x.AttributeID == Convert.ToInt32(eachfilt[1])));
我使用了这段代码,但我知道这是错误的,收到错误消息但不知道如何访问它?我需要加入两个 table 还是仅使用 Linq 的另一种简单方法?
样本
product rows
product_id
1
2
3
4
5
AttributItem rows
attribute_id
11
12
13
现在 Product_Attribut table 有这行
product_id attribute_id
1 11
2 11
2 12
3 12
当我将 attribute_id 过滤器设置为 11 时,我希望输出是产品 table,只有产品 1 和 2 而不是(3,4 和 5)
你可以查看下面的代码来获取这个东西。 你有一对多的关系,所以从 Product_Attribut 属性 我们可以在 linq where 子句的帮助下过滤数据,然后 select 用户想要使用匿名函数或 class present在你的例子中。
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();
这是您获取 table 的数据并在与此 table 具有一对多关系的另一个 table 上进行过滤的方式,结果和输出只是产品 table 和数据作为您想要获得的
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));