Как я могу узнать, содержит ли строго типизированная таблица значение из другой строго типизированной таблицы в C#, используя Linq - PullRequest
0 голосов
/ 02 апреля 2020

У меня есть две таблицы со строгими таблицами для клиентов с местоположениями, в которых есть столбцы "CustomerCode" и "Location".

В клиенте A есть следующие строки:

"A", 1
"A", 2
"A", 3

В клиенте B есть следующие строки:

"B", 2
"B", 5
"B", 6

Как я могу использовать Linq для тренировки, есть ли у клиента B какие-либо местоположения, так же, как у клиента A.

Я хочу сделать что-то вроде этого foreach, но в linq:

var doesExist = false; 
foreach(var a in customersA)
{
   if (customersB.Select(b => b.Location).Contains(a.Location))
   {
      doesExist = true;
      break;
   }
 }

Например, я хочу сделать что-то вроде этого:

customersA.Select(a => a.Location).Any(customersB.Select(b => b.Location)

Ответы [ 3 ]

3 голосов
/ 02 апреля 2020

Примечание. Я предполагаю, что вам нужен один тип bool, который определяет, есть ли в обеих таблицах клиенты с общим местоположением. И при условии, что вам все равно, у какого клиента (ей) было совпадение - просто, что совпадение было вообще.

Если вы хотите, чтобы все это было в операторах LINQ, вложите операторы Any, затем сравните свойство Location :

bool sameLocationFound = customersB.Any(b => customersA.Any(a => a.Location == b.Location));

Я читаю этот код как «найти, существует ли какой-либо клиент B, такой, что любой клиент A разделяет местоположение с B».

2 голосов
/ 02 апреля 2020

Другой способ - использовать ключевое слово let:

var query = (from c in customerA
             let locations = customerB.Select(c => c.Location)
             where locations.Any(l => l == c.Location)
            ).ToList();
2 голосов
/ 02 апреля 2020

Вы можете использовать Intersect, как показано ниже

var location_in_CustA = customersA.Select(a => a.Location);
var location_in_CustB = customersB.Select(b => b.Location);

var intersectionRecords = location_in_CustA.Intersect(location_in_CustB);
var exists = intersectionRecords.Count() > 1;

Создает заданное пересечение двух последовательностей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...