LINQ 问题,看看有没有大神可以看看

IT墨香 2020-10-16 03:39:02
from a in datas
join b in cab on a.ServiceOrderId equals b.ServiceOrderId
join c in sod on a.ServiceOrderId equals c.Id
join d in sum on a.CreateUserId equals d.Id
select new { a,b, c, d};


其中需要查出a的数据,但是带出b,c,d三个表中一些数据,但是a与b,a与c是一对多关系,所以会查出很多重复的,求解不让他重复
...全文
17765 5 点赞 打赏 收藏 举报
写回复
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
正怒月神 2020-10-22
引用 4 楼 墨香阁 的回复:
[quote=引用 3 楼 正怒月神 的回复:]既然 其中需要查出a的数据,但是带出b,c,d三个表中一些数据,但是a与b,a与c是一对多关系 那么如果带出了2个不同的b字段,选哪个? 你需要给出规则
假设a表与b表存在一对多关系,但b表是中间表,最终需要查询c表数据,b表数据与c表为一对一关系 其中c表中存在字段typeid,需要按照typeid排序,取最大值 请问大神有解决方案吗
from a in datas
                                 join b in  cab  on a.ServiceOrderId equals b.ServiceOrderId
                                 join c in sod on b.idequals c.cabid 
                                 select new { a,b, c};
[/quote] 那其实比较简单,就是a,b,c三标互联, 然后获取各组中,c表typeid最大的那个。 我给你个例子,你照着改改
static void Main(string[] args)
        {
            var q = from a in myList            //a表
                    join b in myList1 on a.ID equals b.ID       //b表
                    group b by b.ID into g      //根据id分组
                    select new      //查询出需要的字段
                    {
                        Id = g.Key,     //分组字段
                        Age = g.Max(x => x.Age)     //分组中,最大的Age
                    };


            Console.ReadLine();
        }
  • 打赏
  • 举报
回复
IT墨香 2020-10-21
引用 3 楼 正怒月神 的回复:
既然 其中需要查出a的数据,但是带出b,c,d三个表中一些数据,但是a与b,a与c是一对多关系 那么如果带出了2个不同的b字段,选哪个? 你需要给出规则
假设a表与b表存在一对多关系,但b表是中间表,最终需要查询c表数据,b表数据与c表为一对一关系 其中c表中存在字段typeid,需要按照typeid排序,取最大值 请问大神有解决方案吗
from a in datas
                                 join b in  cab  on a.ServiceOrderId equals b.ServiceOrderId
                                 join c in sod on b.idequals c.cabid 
                                 select new { a,b, c};
  • 打赏
  • 举报
回复
正怒月神 2020-10-21
既然 其中需要查出a的数据,但是带出b,c,d三个表中一些数据,但是a与b,a与c是一对多关系 那么如果带出了2个不同的b字段,选哪个? 你需要给出规则
  • 打赏
  • 举报
回复
类似这样,根据b表根据ServiceOrderId分组后区你需要的字段
from a in datas
join b in  cab.GroupBy(g=>g.ServiceOrderId).Select(s=>new{ServiceOrderId=s.Key,abc = s.Max(m=>m.你需要的字段)})  
on a.ServiceOrderId equals b.ServiceOrderId
  • 打赏
  • 举报
回复
Logerlink 2020-10-21
select new { name = a.name, bid = b.id, cid = c.id, ... };
  • 打赏
  • 举报
回复
发帖
LINQ
创建于2007-12-13

8496

社区成员

.NET技术 LINQ
申请成为版主
帖子事件
创建了帖子
2020-10-16 03:39
社区公告
暂无公告