linq 使用Entity Framework从SQL数据库中获取除

qpgpyjmq  于 2023-10-13  发布在  其他
关注(0)|答案(4)|浏览(143)

我有一个这样的产品列表

var r = db.Products.Where(x => x.Sites
                                .Where(z => z.Key == associatedProducts.Key)
                                .Any()
                  ).ToList()

有一个名为Products的实体,我想从products中获取所有元素,除了那些存在于associatedProducts中的元素。Products
我该怎么做?

ktecyv1j

ktecyv1j1#

如果在previos查询中使用EF获取associatedProducts列表,则以下查询有效。

var temp = db.Products.ToList().Except(associatedProducts).ToList();

否则,如果associatedProducts是尚未使用EF获取的列表(假设Key是整数);

List<int> tempIdList = associatedProducts.Select(q => q.Key ).ToList();
var temp = db.Products.Where(q => !tempIdList.Contains(q.Key));
vmpqdwk3

vmpqdwk32#

var query = from p in db.Products
                        where !(from a in associatedProducts.Products
                                select a.Products)
                                .Contains(p.Key)
                        select p;

我没有测试查询,但它应该是这样的。
你应该看看如何在linq中使用“not in”:
How would you do a "not in" query with LINQ?

xjreopfe

xjreopfe3#

在EF6的背景下。我假设Product和AssociatedProduct实体之间存在一对多的关系。因此,您可以使用导航属性来查找指定的结果。

public class AssociatedProduct
{
    [Key]
    public int kye { get; set; }
    ......
    ......
    public List<Products> Products { get; set; }
}
public class Product
{
    [Key]
    public int key { get; set; }
    .........
    .........
    public AssociatedProduct  AssociatedProduct { get; set; }

}

如果实体类的定义如上所示,则查询将生成所有未关联的产品。

var productsNotAssociated = _dbctx.Product
                             .Where(p=> p.AssociatedProduct == null)
                             .ToList();
bybem2ql

bybem2ql4#

您可以加载要排除的产品列表,然后将其从所有产品列表中删除。

相关问题