我有这样的查询:
var foundData = await DatabaseContext.Set<TableA>()
.AsNoTracking()
.Where(x => list.Contains(x.Code))
.Select(x => x.Code)
.ToListAsync()
.ConfigureAwait(false);
var notFoundData = await DatabaseContext.Set<TableA>()
.AsNoTracking()
.Where(x => !list.Contains(x.Code))
.Select(x => x.Code)
.ToListAsync()
.ConfigureAwait(false);
由于该查询两次访问数据库,因此,我不想从数据库中检索所有记录然后进行过滤。是否可能有List<tuple>
这样的查询来完成
假设数据库包含:
A,B,C,D,E
实际上,数据库包含数百万条记录。列表也是如此。
并且列表包含A,B,F
因此找到的列表将包含:A,B
并且notFound将包含:F
因此预期输出为var(找到,未找到)=吗?
答案 0 :(得分:0)
这对您有帮助吗?
var source = new List<string> { "A", "B", "C", "D", "E" };
var target = new List<string> { "A", "B", "F" };
var foundOrNot = target.Select(s => new { Value = s, Found = source.Contains(s) });
foreach(var entry in foundOrNot)
{
Console.WriteLine("Value: " + entry.Value + "; Found: " + entry.Found.ToString());
}
答案 1 :(得分:0)
您可以执行以下操作:
List<string> records = new List<string> {"A", "B", "C", "D", "E"};
List<string> list = new List<string> {"A", "B", "F"};
var result = records
.GroupBy(r => list.Contains(r))
.ToDictionary(r => r.Key);
var (found, notfound) = (result.ContainsKey(true) ? result[true].Select(g => g) : new List<string>(),
result.ContainsKey(false) ? result[false].Select(g => g) : new List<string>());