【问题标题】:Entity Framework select distinct name实体框架选择不同的名称
【发布时间】:2011-05-31 04:38:35
【问题描述】:

如何使用Entity Framework 进行SQL 查询?

SELECT DISTINCT NAME FROM TestAddresses

【问题讨论】:

    标签: c# linq entity-framework distinct


    【解决方案1】:

    使用 lambda 表达式..

     var result = EFContext.TestAddresses.Select(m => m.Name).Distinct();
    

    使用 where 的另一种变体,

     var result = EFContext.TestAddresses
                 .Where(a => a.age > 10)//if you have any condition
                 .Select(m => m.name).Distinct();
    

    使用类似 sql 语法的另一种变体

     var result = (from recordset
                  in EFContext.TestAddresses
                  .where(a => a.city = 'NY')//if you have any condition
                  .select new 
                  {
                     recordset.name
                  }).Distinct();
    

    【讨论】:

    • 这可能是一个愚蠢的问题,但这会将所有地址返回到 C# 代码层然后过滤它们,还是将适当的查询传递给数据库服务器以仅返回唯一值?
    • 结果的数据类型是什么
    • @D.A. EF 会将适当的查询传递给 DB。 stackoverflow.com/questions/37595253/…
    【解决方案2】:

    试试这个:

    var results = (from ta in context.TestAddresses
                   select ta.Name).Distinct();
    

    这将为您提供IEnumerable<string> - 您可以在其上调用.ToList() 以获取List<string>

    【讨论】:

    • 这样可以获得比分组更好的性能。不同:SQL Server 执行时间:CPU 时间 = 0 毫秒,经过时间 = 50 毫秒。分组:SQL Server 执行时间:CPU 时间 = 0 毫秒,经过时间 = 112 毫秒。
    【解决方案3】:

    @alliswell 展示的方式是完全有效的,还有另一种方式! :)

    var result = EFContext.TestAddresses
        .GroupBy(ta => ta.Name)
        .Select(ta => ta.Key);
    

    我希望它对某人有用。

    【讨论】:

    • 这对我来说非常有用,因为我需要选择多个列
    【解决方案4】:
    DBContext.TestAddresses.Select(m => m.NAME).Distinct();
    

    如果您有多个列,请这样做:

    DBContext.TestAddresses.Select(m => new {m.NAME, m.ID}).Distinct();
    

    在这个例子中没有重复的 CategoryId 也没有 CategoryName 我希望这会对你有所帮助

    【讨论】:

      【解决方案5】:

      实体框架选择不同的名称:

      假设如果您使用正在使用多个表的视图,并且您想在这种情况下应用 distinct,首先您必须将值存储在变量中,然后您可以对这个变量应用 Distinct ......

      public List<Item_Img_Sal_VIEW> GetItemDescription(int ItemNo) 
              {
                  var Result= db.Item_Img_Sal_VIEW.Where(p => p.ItemID == ItemNo).ToList();
                  return Result.Distinct().ToList();
              }
      

      或者你可以试试这个简单的例子

      Public Function GetUniqueLocation() As List(Of Integer)
                Return db.LoginUsers.Select(Function(p) p.LocID).Distinct().ToList()
      End Function
      

      【讨论】:

      • 嗨,当我在桌子上执行此操作时,出现错误 -> 无法将字符串转换为 IEnumreable.. 你能告诉我如何获取列表以便我可以使用 EF DB 中包含 NVARCHAR 的表列中的不同值填充下拉列表。
      【解决方案6】:

      使用 Select().Distinct()

      例如

      DBContext db = new DBContext();
      var data= db.User_Food_UserIntakeFood .Select( ).Distinct();
      

      【讨论】:

        【解决方案7】:

        为了避免ORDER BY items must appear in the select list if SELECT DISTINCT报错,最好应该是

        var results = (
            from ta in DBContext.TestAddresses
            select ta.Name
        )
        .Distinct()
        .OrderBy( x => 1);
        

        【讨论】:

          【解决方案8】:

          Entity-Framework 选择不同的名称:

          假设您想要每组特定列的每个第一个数据;

           var data = objDb.TableName.GroupBy(dt => dt.ColumnName).Select(dt => new { dt.Key }).ToList();
          
                      foreach (var item in data)
                      {
                          var data2= objDb.TableName.Where(dt=>dt.ColumnName==item.Key).Select(dt=>new {dt.SelectYourColumn}).Distinct().FirstOrDefault();
          
                         //Eg.
                          {
                                 ListBox1.Items.Add(data2.ColumnName);                    
                          }
          
                      }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-05-14
            • 1970-01-01
            • 1970-01-01
            • 2022-12-12
            • 1970-01-01
            相关资源
            最近更新 更多