【问题标题】:How can I get only records with a unique property using entity framework and linq?如何使用实体框架和 linq 仅获取具有唯一属性的记录?
【发布时间】:2020-02-06 08:32:27
【问题描述】:
public class Person
{
     public string firstName;
     public string lastName;
}

我想要一个具有唯一名字的所有人员的列表。

人员表

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

查询应该返回

Trish, Chidi

我尝试过使用 Distinct 以及 GroupBy 和 Select 的组合,但它们返回 Trish, Chidi, Tom, Amy

【问题讨论】:

  • 请展示您的尝试。 GroupBy 有一个 Count 属性

标签: c# .net entity-framework linq


【解决方案1】:

Demo on dotnet 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

【讨论】:

    【解决方案2】:

    为此,您可以同时使用 group by 和 count 功能:

    1.从 DB 中获取所有人的列表:

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

    快乐编码...

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-12
    • 1970-01-01
    相关资源
    最近更新 更多