首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用LINQ to SQL获取计算列的distinct值?

如何使用LINQ to SQL获取计算列的distinct值?
EN

Stack Overflow用户
提问于 2021-07-19 12:19:35
回答 1查看 79关注 0票数 0

我正在使用实体框架(C#)执行LINQ to SQL查询,在该查询中,我只需要检索单个列的不同值。问题是,在执行distinct操作之前,我需要修剪其中的一些列。例如:

代码语言:javascript
复制
Region
--------------
Primary
Primary Region
Secondary 
Secondary Region
Primary Region

应该变成:

代码语言:javascript
复制
Region
-----------
Primary
Secondary

现在,我正在通过以下查询来实现这一点:

代码语言:javascript
复制
IQueryable<Region> regions =
(
    from region in db.Regions
    select new Region
    {
        RegionName = detail.RegionName
    }
).Distinct().OrderBy(r => r.RegionName);

return regions
    .ToArray()
    .Select(r => r.RegionName)
    .ToArray()
    .Distinct()
    .Select(r => new Region { RegionName = r })
    .ToArray();

public class Region
{
    private string _regionName;
    
    public string RegionName 
    { 
        get => _regionName;

        set => _regionName = value?.IndexOf(" Region") > 1 ? value?.Substring(0, value.IndexOf(" Region")) : value;
    }
}

Region类执行剥离名称的工作。然而,这似乎效率非常低,必须完成所有到数组的转换,然后再转换回Region和数组。有没有更好的方法?

EN

回答 1

Stack Overflow用户

发布于 2021-07-19 13:11:10

我猜下面的代码将从linq转换为sql:

代码语言:javascript
复制
var distinctRegions = db.Regions
      .Select(c => c.RegionName.Replace(" Region", "").Trim()) //Trim() (just in case) to remove any leading and trailing whitespaces.
      .Distinct()
      .OrderBy(c => c);

如果可以,这意味着您需要将Region类的RegionName属性修改为简单的{ get; set; }

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68435089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档