首页 新闻 会员 周边 捐助

EF如何取出数据库逗号分开的数据

-2
悬赏园豆:30 [待解决问题]
现在有两张表

table 1 :
id code
1 001
2 001,002
3 001,002,003

table 2:
code name
001 数学
002 体育
003 美术

要求结果
id name
1 数学
2 数学,体育
3 数学,体育,美术





我异想天开想这样。。果断出错了。。
复制代码
var list = from o in table1

select new
{
o.id
name = (from z in table2 where z.code in o.code.......)
};
复制代码

 

现在就是想要输出的这个list里面name不是001,002,这样的,而是直接变成 数学,体育 这样直接出来的数值。。用join没办法啊。不是一一对应的,这个该怎么办。。

MayBreath的主页 MayBreath | 菜鸟二级 | 园豆:337
提问于:2018-05-11 09:27
< >
分享
所有回答(7)
-1

要么你修改数据库设计,要么你用C#代码实现你要的功能,不要让数据库干这种事。

爱编程的大叔 | 园豆:30844 (高人七级) | 2018-05-11 09:29

不对吧大叔,这设计没什么问题,大部分一对多的都这么设计,C#代码当然可以实现,问题是一个个拆开再取的查询效率肯定不能这样做,数据库就应该用来干一次查询这种事

支持(0) 反对(0) MayBreath | 园豆:337 (菜鸟二级) | 2018-05-11 09:43

@MayBreath: 买本《SQL Server 从入门到精通》,这是可以看几年的书。先看他半个月,以后当词典用。

SQL 语言几乎已经是编程语言里面最简单的,只是理解和设计不容易。

支持(0) 反对(0) 爱编程的大叔 | 园豆:30844 (高人七级) | 2018-05-11 11:08

@爱编程的大叔: 大叔啊,知识本来就是学无止境,而术业是有专攻的啊,不然为啥还有个DBA职位呢。我用EF,就是为了独立和SQL分开的编程,如果不是非常专业的水平,写出来的语句还不如EF自动生成的高效哦,这边不是在讨论sql,是ef哦

支持(0) 反对(0) MayBreath | 园豆:337 (菜鸟二级) | 2018-05-11 11:24

@MayBreath: 不懂数据库,懂EF有个屁用。

支持(0) 反对(0) 爱编程的大叔 | 园豆:30844 (高人七级) | 2018-05-11 11:48

@爱编程的大叔: 你这么浮躁的吗?人家楼下答案多完美,自己去看看EF是什么,还有人家disucz数据库怎么设计的再来吧

支持(0) 反对(0) MayBreath | 园豆:337 (菜鸟二级) | 2018-05-11 17:54
1

var l_obj = new List<Res>()
{
new Res{id="1",code="001"},
new Res {id="2",code="001,002"},
new Res {id="3",code="001,002,003"}
};

var l_subj = new List<Subject>()
{
new Subject {code="001",name="数学"},
new Subject {code="002",name="体育"},
new Subject{code="003",name="美术"}
};

var l_res = l_obj.Select(c => new
{
Id = c.id,
name = string.Join(",", (from t11 in c.code.Split(',')
from t22 in l_subj
where t11 == t22.code
select t22.name
).ToArray())
});

这样应该可以实现你的效果了吧

华临天下 | 园豆:1501 (小虾三级) | 2018-05-11 10:29
0

数据库:http://www.cnblogs.com/WangShuaishuai/p/9022952.html  

后代代码拆分遍历数组:

string ids = "1,2,3"

string[] allid = ids.Split(',')

foreach(string id in allid){

}

徒然喜欢你 | 园豆:1741 (小虾三级) | 2018-05-11 10:39
0

你当字符串取出来,然后以 "," 号分割存到新的数组或者字典里就完了呗

DanBrown | 园豆:1321 (小虾三级) | 2018-05-11 11:00
0

存储过程了解一下

小光 | 园豆:1766 (小虾三级) | 2018-05-11 13:45
0
SELECT (SELECT group_concat(name SEPARATOR ',') as name from table2 where find_in_set(table2.code,table1.code)) as name,id FROM table1
思念断了线 | 园豆:263 (菜鸟二级) | 2018-05-11 13:48
0

设计很戳,你这明显是可预计个数的,不超过32状态,直接用uint枚举,不超过8个用byte,用位操作。效能上n个数量级,存储空间小n多,操作上也很方便。动不动就上string是特别垃圾的。看了ef,看数据库,再看看计算机基础。

给你我做权限跟一些人的差别:

 

花飘水流兮 | 园豆:13617 (专家六级) | 2018-05-11 17:15

这位大侠你是不是回错帖了

支持(0) 反对(0) MayBreath | 园豆:337 (菜鸟二级) | 2018-05-11 17:53

@MayBreath: 

所以建议你需要看计算机原理。

[Flag]

enum CourseCatelog:byte

{

体育=0X01,


数学=0X02,

.....

}

为什么写Flag自己去查;

设置数学和体育的  = (0X01 & 0X02)

支持(0) 反对(0) 花飘水流兮 | 园豆:13617 (专家六级) | 2018-05-11 19:21

@花飘水流兮: 大侠谢谢。不过你说的好像和我不是一回事。2L已经解决了哦 谢谢~

支持(0) 反对(0) MayBreath | 园豆:337 (菜鸟二级) | 2018-05-11 19:23

@MayBreath: 看来你还是没看懂。以后非常有限的你这么设计就对了,然后去看看flag,代码写很少,关键什么效率都还高。

支持(0) 反对(0) 花飘水流兮 | 园豆:13617 (专家六级) | 2018-05-11 19:28
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册