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

时间:2020-04-21 15:21:56

标签: 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(找到,未找到)=吗?

2 个答案:

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

https://dotnetfiddle.net/KL9yfK

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