Как получить уникальное значение с LINQ> SQL? - PullRequest
0 голосов
/ 17 сентября 2011

Используя LINQ to SQL, как получить строку с 1, 21?Я ищу

SomeId==1 
and 
SecondId is a unique entry

SomeId   SecondId
   0        20
   1        21
   1        22
   1        22

РЕДАКТИРОВАТЬ:

Хорошо, извините.Это было не ясно.То, что я пытаюсь сделать, это найти этот ряд.Может быть другая запись, которая выглядит следующим образом:

1      25

И это единственная 25. Так что я бы вернул две строки.Без ссылки на конкретные идентификаторы, как мне найти эти две строки?

Ответы [ 2 ]

3 голосов
/ 17 сентября 2011

РЕДАКТИРОВАТЬ: Хорошо, это было действительно неясно, что вы имели в виду раньше, но теперь я думаю, что я понимаю, что вы имеете в виду, и вы хотите что-то вроде:

var query = from row in table
            where row.SomeId == targetId
            group row by row.SecondId into g
            where g.Count() == 1
            select g.Single();

Другими словами:

  • Фильтр по SomeId первый
  • Группировка по SecondId
  • Фильтр, так что возвращаются только группы с одной записью для этого SecondId
  • Выберите единственную запись из этой группы

Конечно, таких групп может быть несколько - поэтому вы получите (1, 21) и (1, 25) в вашем примере.

1 голос
/ 17 сентября 2011

РЕДАКТИРОВАТЬ : Если вы говорите, что хотели бы найти какую-либо комбинацию SomeId и SecondId, в которой есть несколько строк для этой комбинации? тогда вы можете сделать следующее:

var results = source.Where(x => x.SomeId == 1).GroupBy(x => x.SecondId).Where(g => g.Count > 1);

Это даст вам группы результатов и вернет только те, которые имеют более одной строки. Итак, в вашем примере вы получите группу, которая возвращает 1,22 ...

Если вы ищете случай, когда у вас есть только строки, в которых есть одна запись в таблице с этой комбинацией (в противоположность тому, что я возвращаю), вы можете изменить оператор сравнения с '>' на ' == 'и другой ответчик также показал эту возможность.

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