实体框架选择不同的名称


Answers:


271

使用lambda表达式

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

1
也许这是一个愚蠢的问题,但这是否将所有地址返回到C#代码层,然后对其进行过滤,还是将适当的查询传递给数据库服务器以仅返回唯一值?
DA

51

试试这个:

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

这会给您一个IEnumerable<string>-您可以调用.ToList()它来获取一个List<string>


1
这样,与分组相比,可以获得更好的性能。不同:SQL Server执行时间:CPU时间= 0毫秒,经过的时间= 50毫秒。分组:SQL Server执行时间:CPU时间= 0毫秒,经过的时间= 112毫秒。
安德烈·门登卡

24

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

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

希望对某人有用。


1
这对我来说非常有用,因为我需要选择多个列
mamashare

16
DBContext.TestAddresses.Select(m => m.NAME).Distinct();

如果您有多列,请执行以下操作:

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

在此示例中,没有重复的CategoryId和CategoryName,希望对您有所帮助


4

实体框架选择唯一名称:

假设如果您正在使用的视图中使用多个表,并且在这种情况下要应用与众不同的视图,则首先必须将值存储在变量中,然后可以像这样使用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 ..您能告诉我如何获取列表,以便可以使用包含NVARCHAR的表列中的不同值填充下拉列表在EF DB中。
aggie 2014年

3

使用选择()。鲜明的()

例如

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

2

为了避免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);

1

实体框架选择唯一名称:

假设是否需要每个组的特定列的每个第一数据;

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

            }
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.