日期:2014-05-20  浏览次数:20867 次

一个获取最小值得的LINQ问题
A表 
a_id a_name a_isdel
1 服装 0
2 家电 1
3 日化 0

B表
b_id a_id b_name b_isdel
1 1 风衣 1
2 1 裤子 0
3 2 电视 0
4 2 冰箱 0
5 3 肥皂 0
6 3 牙膏 0

表结构是这样的 A 表是B表的分类




想要显示结果为
a_id a_name b_name 
1 服装 裤子
3 日化 肥皂


想得到 每个分类中一条B表记录,这个记录是这个分类中b_id最小的

而且  
a_isdel 为1代表已经删除,删除的分类不显示
b_isdel为1代表已经删除,删除的B记录不显示
   



------解决方案--------------------
C# code

var query=from a in A
          join b in B
          on A.a_id equals b.a_id
          where a.a_isdel==0 && b.b_isdel==0
          group b by b.a_id into g
          select new 
          {
              a_id=g.Key,
              a_name=A.SingleOrDefault(c=>c.a_id==g.Key).a_name,
              b_name=g.OrderBy(c=>c.b_id).FirstOrDefault().b_name
          };

//代码手写 谨提供思路参考

------解决方案--------------------
猫哥写的很好啊
------解决方案--------------------
var result = from u in db.TableA
from n in db.TableB
where u.a_id == n.a_id && u.a_isdel == 0 && n.b_isdel == 0
group n by n.a_id into g
select new
{
a_id = g.Key,
a_name = db.TableA.SingleOrDefault(c => c.a_id == g.Key).a_name,
b_name =g.FirstOrDefault(c=>c.b_id==(g.Min(t=>t.b_id))).b_name
};
------解决方案--------------------
探讨

C# code

var query=from a in A
join b in B
on A.a_id equals b.a_id
where a.a_isdel==0 && b.b_isdel==0
group b by b.a_id into g
select new
……