如何在不使用 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_ItemProduct_Attribut Product_Attribut 与这两个 table 有 1:m 关系,这意味着两个 1:m 关系

现在我想获取 products 数据 table 其中 Product_Atrribute 应该有一行productIDAttributeID 其中 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));