Получение элементов из входного списка, которых нет в базе данных, с помощью EF Core 2.1 - PullRequest
2 голосов
/ 06 мая 2020

Я хочу получить элементы из входного списка, которых нет в таблице базы данных.

Я передаю список IDs, а затем хочу вернуть те IDs, которых нет в моей таблице.

Это то, что у меня есть на данный момент:

var input = new List<string>() // list of Ids, for example count of 10

var itemsThatExistInDb = await DbContext.Set<Data>() // in table exist 100k+ records,
        .AsQueryable()                               // can't use simple !Contains()
        .Where(x => input.Contains(x.Id))
        .Select(x => x.Id)
        .ToListAsync();

var itemsThatNotExistInDb = input.Except(itemsThatExistInDb).ToList();

Как написать запрос в EF Core 2.1 для получения элементов из моего списка ввода, которых нет в моей базе данных, без использования расширений linq как Except()? Если возможно, я хочу получить эти Ids прямо из моего запроса к базе данных на DbContext

Ответы [ 2 ]

0 голосов
/ 06 мая 2020

Если вы не хотите использовать !contain, вы можете использовать логический метод, как показано ниже:

datatTable - это содержимое вашей таблицы.

List<string> fullList = new List<string>() { "3", "1", "2" }; //or any dynamic list content or class list based on requirement.
List<string> itemsThatNotExistInDb = new List<string>(); //New container list same as fullList
            foreach (var item in fullList)
            {
                var isRemoved = dataTable.RemoveAll(a => a.Id == item) == 1 ? true : false;
                if (isRemoved)
                {
                    itemsThatNotExistInDb.Add(item);
                }
            }
0 голосов
/ 06 мая 2020

Я думаю, вы можете запросить это так:

var input = new List<string>() // list of Ids

       List<string> itemsThatExist = new List<string>();

       var itemsThatNotExist  = await DbContext.Set<Data>()
                .AsQueryable()
                .ToDictionaryAsync(_ => _.ID, _ => _);

        foreach (var item in input)
        {
            if(AllItems.ContainsKey(item)){
                itemsThatExist.Add(item);
                itemsThatNotExist.Remove(item);
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...