元组包含和不包含列表C#

  • 本文关键字:包含 列表 元组 c# linq
  • 更新时间 :
  • 英文 :


我有一个这样的查询:

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(find,notfind(=?

这对您有帮助吗?

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());
}

https://dotnetfiddle.net/KL9yfK

您可以执行以下操作:

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>());

最新更新