我正在使用实体框架(C#)执行LINQ to SQL查询,在该查询中,我只需要检索单个列的不同值。问题是,在执行distinct操作之前,我需要修剪其中的一些列。例如:
Region
--------------
Primary
Primary Region
Secondary
Secondary Region
Primary Region应该变成:
Region
-----------
Primary
Secondary现在,我正在通过以下查询来实现这一点:
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和数组。有没有更好的方法?
发布于 2021-07-19 13:11:10
我猜下面的代码将从linq转换为sql:
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; }
https://stackoverflow.com/questions/68435089
复制相似问题