Entity Framework 查询问题(需求如图),在Tableb表中存储CityInfo的主键列表(用逗号隔开),想要取出取出 Tabelb 表中某条记录中对应的所有CityName值,并用逗号分隔。备注:查询的是一个组合好的数据列表。#SOS#
var query = db.Tableb.ToList().Select(c => new { c.CIds, c.TId, ids = ConvertToInts(c.CIds.Split(',')), }).Select(c => new { c.CIds, c.TId, sNames = c.ids.Select(id => db.CityInfo.FirstOrDefault(ci => ci.CId == id).CName) }).Select(c => new { c.TId, c.CIds, CNames = GetMyString(c.sNames) });
public static string GetMyString(IEnumerable<string> cNames) { StringBuilder sb = new StringBuilder(); foreach (string name in cNames) { if (sb.Length > 0) sb.Append(","); sb.Append(name); } return sb.ToString(); } public static IEnumerable<int> ConvertToInts(string[] ids) { foreach (string sid in ids) { int id = int.Parse(sid); yield return id; } }
你好,感谢您的回复。
这种方法我之前试过,在ids = ConvertToInts(c.CIds.Split(',')), 这里就报错了。。
@周煜皓: 不会的,你没注意到我在查表之前先ToList()了,这样就不会报错的。
var query = db.Tableb.ToList().Select(c => new
但是这样有个问题,如果Tableb表数据量比较大的时候,运行会很慢,所以建议在执行ToList()之前先做筛选。
@RyanCheng: 哦。这样全表查询确实会比较慢,有没有其他方法呢?
@RyanCheng: 嗯,我尝试了一下,确实可以了,我在ToList 之前进行了where 和 分页。速度暂时感觉不是很慢,再次感谢。