[英]How to write an async concat with Entity Framework core?
我正在研究 .NET 6 项目。
以下是我的查询:
var data = await _context.Claims.AsNoTracking()
.Where(cl=>cl.Contract.User.Email==email)
.Select(cl=>new ClaimDTO
{
id=cl.id,
desc=cl.desc
})
.ToListAsync();
这是我的第二个查询:
var data2 = await _context.HistoricalClaims.AsNoTracking()
.Where(cl=>cl.Contract.User.Email==email)
.Select(cl=>new ClaimDTO
{
id=cl.id,
desc=cl.desc
})
.ToListAsync();
我想学习如何在 SQL 服务器和客户端进行 UNION ALL。
这是我在 SQL 服务器上尝试执行的代码:
var data = await _context.Claims.AsNoTracking()
.Where(cl=>cl.Contract.User.Email==email)
.Select(cl=>new ClaimDTO
{
id=cl.id,
desc=cl.desc
})
.Concat(await _context.HistoricalClaims.AsNoTracking()
.Where(cl=>cl.Contract.User.Email==email)
.Select(cl=>new ClaimDTO
{
id=cl.id,
desc=cl.desc
})
)
.ToListAsync();
有人可以更正我的查询以在 sql 服务器上执行联合。
其次,假设我运行 2 个单独的查询并且响应保存在 data 和 data1 变量中,那么以下语法是否正确? vat result = data.Concat(data1);
我想你很接近。 不需要Concat()
中的await
。
var items = await context.Items
.Where(w => w.ItemNo == 4)
.Select(s => new Dto { Name = s.Desc, Num = s.ItemNo })
.Concat(
context.ItemsHistory
.Where(w => w.ItemNo == 4)
.Select(s => new Dto { Name = s.Desc, Num = s.ItemNo })
)
.ToListAsync();
此 SQL 查询的结果:
SELECT [i].[Desc] AS [Name], [i].[ItemNo] AS [Num]
FROM [Items] AS [i]
WHERE [i].[ItemNo] = 4
UNION ALL
SELECT [i0].[Desc] AS [Name], [i0].[ItemNo] AS [Num]
FROM [ItemsHistory] AS [i0]
WHERE [i0].[ItemNo] = 4
关于您的第二个问题:是的,只要类型相互兼容,您就可以在具体化后将两个列表连接在一起:
public static IEnumerable<TSource> Concat<TSource>(
this IEnumerable<TSource> first,
IEnumerable<TSource> second)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.