【问题标题】:How can I call distinct on entities in ASP.NET MVC 4如何在 ASP.NET MVC 4 中的实体上调用 distinct
【发布时间】:2017-06-07 04:00:46
【问题描述】:

我有两张表,用户可以在其中保存城市数据。我想在连接查询上使用 Distinct 来计算两个表中的城市总数。

Table 1       Table 2

ID City       ID City
--------      ----------
1  CHD        1  PUT
2  PUT        2  CHD
3  LUD        3  MALK
4  CHD        4  PUT
5  PUT        5  APC

我想加入两个表并获得城市的总数,但我想确保在计数中不会重复引用。也就是说,如果表1和表2中存在CHD,则只计算一次。

我不想重复计算城市。我希望能够过滤我的结果并获得总数。

我已经为表 1 编写了这段代码,但我希望通过连接查询获得相同的结果。

public int Locations()
{
    int Locations = 0;           

    using (var db = new Entities())
        Locations = db.Table1.Select(o => o.City).Distinct().Count();          

    int Locations = 0;           

    using (var db = new Entities())
        Locations = db.Table2.Select(o => o.City).Distinct().Count();

    return Locations;
} 

我怎样才能用 2 张桌子做到这一点?

【问题讨论】:

    标签: sql-server asp.net-mvc entity-framework


    【解决方案1】:

    这是未经测试的,但我认为它可能是您正在寻找的。

    public int Locations()
    {         
         using (var db = new Entities()) 
         {
              return (db.Table1.Select(x => x.City).Union(db.Table2.Select(y => y.City)))
                     .Distinct().Count()
         }
    } 
    

    【讨论】:

    • 谢谢你#Dillon,它真的很有帮助。
    【解决方案2】:

    执行 LINQ Union,它将自动只从每个组件列表中获取唯一性:

    var locations = table1Locations.Union(table2Locations);
    

    请记住,这只会起作用,因为您只从每个表中选择了 City。这意味着您有效地组合了两个IEnumerable<string>s。如果您要尝试直接组合对象,它会失败,因为您基本上有一个 IEnumerable<Table1Entity>IEnumerable<Table2Entity>,它们不能被联合起来。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-20
      • 1970-01-01
      • 2014-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-18
      相关资源
      最近更新 更多