首页 新闻 会员 周边 捐助

Entity Framework 特殊查询问题

0
悬赏园豆:10 [已解决问题] 解决于 2012-12-08 23:42

Entity Framework 查询问题(需求如图),在Tableb表中存储CityInfo的主键列表(用逗号隔开),想要取出取出 Tabelb 表中某条记录中对应的所有CityName值,并用逗号分隔。备注:查询的是一个组合好的数据列表。#SOS#

西安-DB的主页 西安-DB | 初学一级 | 园豆:4
提问于:2012-12-08 19:03
< >
分享
最佳答案
0
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;
            }
        }
收获园豆:10
RyanCheng | 菜鸟二级 |园豆:474 | 2012-12-08 22:43

你好,感谢您的回复。

这种方法我之前试过,在ids = ConvertToInts(c.CIds.Split(',')), 这里就报错了。。

西安-DB | 园豆:4 (初学一级) | 2012-12-08 23:12

@周煜皓: 不会的,你没注意到我在查表之前先ToList()了,这样就不会报错的。

var query = db.Tableb.ToList().Select(c => new

但是这样有个问题,如果Tableb表数据量比较大的时候,运行会很慢,所以建议在执行ToList()之前先做筛选。

RyanCheng | 园豆:474 (菜鸟二级) | 2012-12-08 23:21

@RyanCheng: 哦。这样全表查询确实会比较慢,有没有其他方法呢?

西安-DB | 园豆:4 (初学一级) | 2012-12-08 23:37

@RyanCheng: 嗯,我尝试了一下,确实可以了,我在ToList 之前进行了where 和 分页。速度暂时感觉不是很慢,再次感谢。

西安-DB | 园豆:4 (初学一级) | 2012-12-08 23:42
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册