今天周六,但是因为台风的原因,需要补班,其实我好多时候周六都会自己来加班,但是自己加班和被要求上班感觉上还是差太多,总有一种被强迫的感觉...
今天最重要的收获是好好折腾了一下EF~
是这样的,有3个表A,B,C,A表和B表是一对一关系,B表和C表是多对多关系,他们都有关联属性。现在我需要生成一个object的,这个object里有A,B,C这3个表的部分数据,且需要将这部分数据重命名。如果是写SQL的话,就非常简单,但是用EF完全不知道怎么做,因为大多数时候,都只会查其中一个表,或者其中两个表的数据,而这两个表是有关联属性的,所以还好,一对一的一般情况如下
context.a.Select(a=> new
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>anewname = a.name,
<span style="white-space:pre"> </span>bnewname = a.b.name
<span style="white-space:pre"> </span>}));
多对多的一般情况如下
context.b.SelectMany(b => b.c.Select(c => new
{
bnewname= b.name,
cnewname = c.name
}));
上面2种情况都只是涉及2个表的数据,当我按照多对多的关系写出下面的语句时,就报错了
context.b.SelectMany(b => b.c.Select(c => new
{
<span style="white-space:pre"> </span>anewname = b.a.name,
bnewname= b.name,
cnewname = c.name
}));
说实话,有点懵逼,感觉本来A和B之间就是就是一对一的关系,那知道了b,肯定就能推导a啊!但实际上就是会报错,所以我尝试了一下午,找到了一种写法,如下
我暂时还没理解为什么要这么写,不过好在是可以跑通的,只有有时间,好好的研究下EF的工作原理了~