浅谈LINQ连表查询的那些事(高手滚远点)
数据库
create table stu
(
id int ,
name varchar(100)
)
create table score
(
id int ,
scores int
)
1.首先还是先回顾下LINQ怎么查询制定字段
很简单 代码如下 也可以自定义列名
 View Code
View Code 
1 var d = from c in wq.stu 2 select new 3 { 4 c.id 5 };
 View Code
View Code 
1 var d = from c in wq.stu 2 select new 3 { 4 我日你妹= c.id 5 };
2.回归正题 记录谈下LINQ的多表查询
(1)左连接查询
 var res = from a in wq.stu
                      join b in wq.score on a.id equals b.id into cao
                      from x in cao.DefaultIfEmpty()
                      select new
                      {
                          a.id,
                          a.name,
                          x.scores
                      };
先看看这个吧 其实也没多看到的 就是个左连接查询而已 嗯哈 记住了哈
(2)多表查询
var str = from c in wq.stu
                      join
                      d in wq.score
                      on c.id equals d.id
                      select new
                      {
                          c.id,
                          c.name,
                          d.id,
                          d.scores
                      };
这个时候就会报个错 因为c.id, d.id 是相同的 不晓得为什么LINQ机制就是不允许这样 删除一个就好了
得到下面的代码
 var str = from c in wq.stu
                      join
                      d in wq.score
                      on c.id equals d.id
                      select new
                      {
                          c.id,
                          c.name,
                          d.scores
                      };
运行 分析下 得到的str其实就是一个匿名模型 包含了这3个这段的一个泛型集合(当然在未 .ToList()转换之前还是弱类型 )
然后我们如果想要把他封装起来的话 就需要定义一个符合这个模式的模型
 public class ff
    {
        public int? fid { get; set; }
        public int? fscores { get; set; }
        public string fname { get; set; }
    }
嗯哈 然后就开始封装吧 封装的方法类似
 List<ff> str = (from c in wq.stu
                            join d in wq.score
                            on c.id equals d.id
                            select new ff()
                            {
                                fid = c.id,
                                fname = c.name,
                                fscores = d.scores
                            }).ToList();
嗯哈 大功告成 go to sleep 母情节快到了 祝福老妈节日快乐
 
                     
                    
                 
                    
                 

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号