【问题标题】:Using distinct on all columns in Entity Framework在实体框架中的所有列上使用 distinct
【发布时间】:2017-05-17 03:22:45
【问题描述】:

我是实体框架的新手。我正在尝试在 EF 中编写选择查询,该查询从视图中选择不同的列。我正在使用以下代码

List<ClientDTO> oClients = new List<ClientDTO>();

oClients = (from p in context.vwClients
            where (p.ClientNumber == ClientNumber) && p.isDeleted == true
            select new ClientDTO
                   {
                       ClientNumber = p. ClientNumber,
                       IncomeClassId = p.IncomeClassId,
                       FullClientName = p. FullClientName,
                       CountryId = p.CountryId,
                       ProductId = p.ProductId,
                       ProductName = p.ProductName,
                       ProductShortName = p.ProductShortName,
                       isDeleted = p. isDeleted
                   }).OrderBy(x => x. FullClientName).Distinct().ToList();

它仍然返回重复的行。当我在所有列上编写不同的 SQL 查询时,它确实返回不同的行。

有没有办法区分上面代码中使用的所有列?

【问题讨论】:

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


    【解决方案1】:

    使用匿名对象应该可以。

    var oClients = (from p in context.vwClients where (p.ClientNumber == ClientNumber) && p.isDeleted == true
                                    select new ClientDTO
                                    {
    
                                       ClientNumber = p. ClientNumber,
                                       IncomeClassId = p.IncomeClassId,
                                       FullClientName = p. FullClientName,
                                       CountryId = p.CountryId,
                                       ProductId = p.ProductId,
                                       ProductName = p.ProductName,
                                       ProductShortName = p.ProductShortName,
                                       isDeleted = p. isDeleted
                                    }
                            ).Select(i => new {i.ClientNumber, i.IncomeClassId, i.FullClientName, i.CountryId, i.ProductId, i.ProductName, i.ProductShortName, i.isDeleted}).Distinct().ToList();
    

    【讨论】:

      【解决方案2】:

      您可以简单地使用 lambda 表达式来获得所需的结果:

      List<ClientDTO> oClients =context.vwClients.Where(p=> p.ClientNumber == ClientNumber && p.isDeleted == true)        
                          .Select(p=> new ClientDTO
                          {
                                          ClientNumber = p. ClientNumber,
                                         IncomeClassId = p.IncomeClassId,
                                         FullClientName = p. FullClientName,
                                         CountryId = p.CountryId,
                                         ProductId = p.ProductId,
                                         ProductName = p.ProductName,
                                         ProductShortName = p.ProductShortName,
                                         isDeleted = p. isDeleted
                          }).OrderBy(p => p. FullClientName).Distinct().ToList();
      

      更多例子click

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-30
        • 1970-01-01
        • 2013-02-04
        • 1970-01-01
        相关资源
        最近更新 更多