Как я могу получить только записи с уникальным свойством, используя Entity Framework и Linq? - PullRequest
0 голосов
/ 06 февраля 2020
public class Person
{
     public string firstName;
     public string lastName;
}

Я хочу получить список всех лиц с уникальным именем.

Таблица персон

Tom Haverford
Tom Baker
Amy Pond
Amy Santiago
Trish Walker
Chidi Anagonye

Запрос должен вернуть

Trish, Chidi

I пробовал использовать Distinct и комбинацию GroupBy и Select, но они возвращают Trish, Chidi, Tom, Amy.

Ответы [ 2 ]

1 голос
/ 06 февраля 2020

Демонстрация при выполнении tnet fiddle

Вы можете Group by затем count количество дублированных элементов. После этого вы можете получить элемент со значением count, равным 1, как показано ниже.

    var arr = new []
    {
        new Person {    firstName = "Tom", lastName = "Haverford" },
        new Person {    firstName = "Tom", lastName = "Baker"},
        new Person {    firstName = "Amy", lastName = "Pond" },
        new Person {    firstName = "Amy", lastName = "Santiago"},
        new Person {    firstName = "Trish", lastName = "Walker"},
        new Person {    firstName = "Chidi", lastName ="Anagonye" }
    };

    var result = arr.GroupBy(p => p.firstName).Select(g => new { Name = g.Key, Count = g.Count()});
    foreach(var item in result.Where(p => p.Count == 1))
      Console.WriteLine(item.Name); 

Выход

Trish
Chidi
0 голосов
/ 06 февраля 2020

Для этого вы можете использовать функции группировки и подсчета вместе:

1. Получить список всех лиц из БД:

var personList = (from p in db.Person select p).ToList(); // I assumed here that your db obj name is 'db' and table name is 'Person'

2. Теперь примените группу к запросу, чтобы получить количество имен:

var q = from x in personList
    group x by x.firstName into g
    let count = g.Count()
    select new {Count = count, Name = g.First().firstName }; 

3. Теперь вы можете получить свой окончательный результат следующим образом:

var finalResult = (from p in q where p.Count == 1 select p).ToList();

Happy Coding ...

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