gpt4 book ai didi

c# - 如何在 Entity Framework 中一次调用使用 UNION(concat/union)?

转载 作者:行者123 更新时间:2023-11-30 23:18:35 26 4
gpt4 key购买 nike

我需要在 Entity Framework 中执行一个 UNION,但我只需要对数据库执行一次调用。我知道我可以使用 CONCAT/UNION,但它会为每个 CONCAT/UNION 调用数据库,这不是我想要的。我需要使用 TOP 4。它太慢了。

这是我的例子...

using (var db = new ApplicationDbContext())
{
var query1 = "SELECT TOP 4 * FROM Products where CategoryID=1";
var query2 = "SELECT TOP 4 * FROM Products where CategoryID=2";
var query3 = "SELECT TOP 4 * FROM Products where CategoryID=3";
IEnumerable<Product> p1 = db.Database.SqlQuery<Product>(query1);
IEnumerable<Product> p2 = db.Database.SqlQuery<Product>(query2);
IEnumerable<Product> p3 = db.Database.SqlQuery<Product>(query3);

IEnumerable<Feed> all = p1.Union(p2).Union(p3);

return all.ToList();
}

如何通过一次调用实现 UNION?

最佳答案

如果您热衷于使用纯 LINQ 执行此操作,您可以按以下方式进行分组,然后根据组内的值排在前 4 位。

  var result = db.Products.GroupBy(p => p.CategoryID).SelectMany(g => g.Take(4));

如果你对两行没问题,你也可以使用编译查询:

var query = CompiledQuery.Compile<ApplicationDbContext, int, int, IQueryable<Product>>(( ctx, filter, top) => ctx.Products.Where(p => p.CategoryID == filter).Take(top));
var result = query(db, 1, 4).ToList().Union(query(db, 2, 4).ToList()).Union(query(db, 3, 4).ToList()).ToList();

这将生成 3 次到数据库的往返,但仍然只返回最多 12 条记录(在我看来不如 groupby 选项好)。

关于c# - 如何在 Entity Framework 中一次调用使用 UNION(concat/union)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40794134/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com