为了获得性能提升,我尝试将Distinct()
的调用替换为GroupBy(...)
,但我收到了错误。
有关如何重写此查询以使用GroupBy(...)
的任何建议?
我正在尝试在GroupBy()
字段上使用Description
。
var result=
GetResults()
.Select(x => new SelectList { Text = x.Description, Value = x.Description })
.Where(x => x.Text != null)
.Distinct()
.ToList();
答案 0 :(得分:1)
您无法强制实体框架在生成的SQL中使用GroupBy
而不是Distinct
子句。实体框架将确定适当的查询,它将使用它。
您的代码中显而易见的一点是,您只对基于唯一描述值的List<string>
感兴趣。我认为你不必创建SelectList
的集合。
你可以这样做:
var result= GetResults()
.Where(x => x.Description != null)
.GroupBy(x => x.Description)
.Select(grp => grp.Key)
.ToList();
OR
var result= GetResults()
.Where(x => x.Description != null)
.Select(x => x.Description)
.Distinct()
.ToList();
上述两个查询都会生成唯一描述值的列表。现在将针对这两种类型生成什么类型的SQL取决于实体框架。
旧答案:
使用GroupBy
分组Description
,然后Select
,其中Key不为null,如:
var result= GetResults()
.Select(x => new SelectList { Text = x.Description, Value = x.Description })
.Where(x => x.Text != null)
.GroupBy(x => x.Value) //Here select Value for Description
.Select(grp => grp.Key)
.ToList();
这不会给你任何性能提升,即使有任何性能提升,也可以忽略不计。
答案 1 :(得分:0)
您可以按Description
分组:
var result=GetResults()
.GroupBy(x => x.Description)
.Where(g => g.Key != null)
.Select(g => new SelectList { Text = g.Key, Value = g.Key })
.ToList();
但如果你的表现更好Distinct
,我会感到惊讶。