linq问题

luoning1217 2017-06-28 05:08:43
求linq写法
三张表,一张任务表,一张文件表,一张消息表。文件表和消息表有任务id外键
如何用linq获取以下格式数据

任务id,该任务文件数,该任务的消息数。

谢谢
...全文
201 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
秋的红果实 2017-06-29
  • 打赏
  • 举报
回复
join写法

class A
{
    public string id { get; set; }
}
class B
{
    public string b_id { get; set; }
    public int b_n { get; set; }

}
class C
{
    public string c_id { get; set; }
    public int c_n { get; set; }

}

//初始化
List<A> a_list = new List<A>();
a_list.Add(new A() {id="1" });
a_list.Add(new A() { id = "2" });
a_list.Add(new A() { id = "3" });

List<B> b_list = new List<B>();
b_list.Add(new B() { b_id = "1", b_n = 10 });
b_list.Add(new B() { b_id = "3", b_n = 20 });
b_list.Add(new B() { b_id = "3", b_n = 40 });
b_list.Add(new B() { b_id = "2", b_n = 30 });

List<C> c_list = new List<C>();
c_list.Add(new C() { c_id = "1", c_n = 100 });
c_list.Add(new C() { c_id = "3", c_n = 200 });
c_list.Add(new C() { c_id = "3", c_n = 300 });
c_list.Add(new C() { c_id = "2", c_n = 400 });
c_list.Add(new C() { c_id = "2", c_n = 500 });

//运算
var queryB = from b in b_list
             group b by new{b.b_id} into qB
             select new
             {
                 IDB=qB.Key.b_id,
                 CountB=qB.Sum(x=>x.b_n)

             };

var queryC=from c in c_list
           group c by new{c.c_id} into qC
           select new
           {
               IDC=qC.Key.c_id,
               CountC=qC.Sum(y=>y.c_n)

           };

var q_result = from a in a_list
               join b in queryB on a.id equals b.IDB
               join c in queryC on a.id equals c.IDC
               select new
               {
                   ID = a.id,
                   SumB = b.CountB,
                   SumC = c.CountC
               };

//结果 id 文件数 消息数 1 10 100 2 30 900 3 60 500
luoning1217 2017-06-29
  • 打赏
  • 举报
回复
引用 2 楼 duanzi_peng 的回复:
手打可能有误,类似:
var result =from p in 任务表
let count1 = 文件表.Count(c=>c.任务id==p.Id)
let count2 = 消息表.Count(c=>c.任务id==p.Id)
select new 
{
  任务id=p.Id,
  文件数= count1,
  消息数= count2,
}
第一次知道有let的用法,谢谢
exception92 2017-06-28
  • 打赏
  • 举报
回复
手打可能有误,类似:
var result =from p in 任务表
let count1 = 文件表.Count(c=>c.任务id==p.Id)
let count2 = 消息表.Count(c=>c.任务id==p.Id)
select new 
{
  任务id=p.Id,
  文件数= count1,
  消息数= count2,
}
xdashewan 2017-06-28
  • 打赏
  • 举报
回复
参考http://blog.csdn.net/qsbqing/article/details/12129657

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧