以下是一些数据的示例:
充电(以下是ChargeName)
Apple 1 Apple 2
香蕉1
香蕉2
胡萝卜3
我需要生成一个如下所示的列表:(注意我需要的是真正按第一个字分组)
苹果
香蕉
胡萝卜
也许应该开始这样的事情?
db.Charges.Select(d=>d.ChargeName).GroupBy(....);
答案 0 :(得分:3)
我不认为EF可以将这样的分组转换为SQL,因此使用AsEnumerable()
调用(将下载所有数据)将分组移动到内存中:
db.Charges.AsEnumerable()
.GroupBy(c => c.ChargeName.Split()[0]);
如果你实际上不需要分组,但只需要组名,那么就像LB建议的那样使用不同的方法。
答案 1 :(得分:2)
var list = new List<string> { "Apple 1", "Apple 2", "Banana 1", "Banana 2", "Carrot 3" };
var newList = list.Select(x => x.Split()[0]).Distinct().ToList();
答案 2 :(得分:2)
如果您想在RDBMS中完全执行此操作,请尝试使用SqlFunctions.CharIndex
,如下所示:
var res = db.Charges.GroupBy( c =>
c.ChargeName.Substring(
0
, SqlFunctions.CharIndex(" ", c.ChargeName) ?? c.ChargeName.Length
)
);
请注意?? c.ChargeName.Length
部分:有必要处理ChargeName
为单个字时的情况。