求一个linq写法

maniacstone 2013-08-07 03:11:00
表逻辑是这样的 Test表引用了TripLine 表的ID,为一对一关系。
而TripLine表和TripLinePlan 是一对多的关系,因为要用到TripLinePlan 表中的列进行条件判断,所以进行3表关联查询。

sql 语句如下:


select a.* from Test a
inner join TripLine b on a.RefID=b.ID
inner join
(
select distinct(a.ID) from TripLine a
left join TripLinePlan b on a.ID=b.TripLineID
where b.OnlineFlag=1 and c.CreateDate <='2013-08-08'
) c on b.ID=c.ID
where b.OnlineFlag = 1





用linq 该怎么写?另外有什么更好的逻辑么?

麻烦各位高手指点下。
...全文
233 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
使用工具linqpad先写sql语句查询,然后可以转到linq语法上,祝你好运,可以试试
东邪独孤 2013-08-11
  • 打赏
  • 举报
回复
引用 6 楼 tcmakebest 的回复:
如果 LINQ 使问题变得复杂了,就没必要用了,直接用 SQL
Linq写起来比SQL还简单,关键是看你懂不懂Linq.
tcmakebest 2013-08-10
  • 打赏
  • 举报
回复
如果 LINQ 使问题变得复杂了,就没必要用了,直接用 SQL
q107770540 2013-08-09
  • 打赏
  • 举报
回复
参考此帖第96楼,重新实现IEqualityComparer<T>接口,使用Enumerable.Distinct<TSource> Method (IEnumerable<TSource>, IEqualityComparer<TSource>)来去重复 http://bbs.csdn.net/topics/390535173
maniacstone 2013-08-09
  • 打赏
  • 举报
回复
引用 2 楼 q107770540 的回复:
var query=from a in Test
          join b in TripLine on a.RefID equals b.ID
          join c in TripLinePlan on b.ID equals c.TripLineID into lg
          from c in lg.DefaultIfEmpty()
          where c.OnlineFlag==1 && c.CreateDate <=Convert.ToDateTime("2013-08-08")
          select a;
最后的那句 能写成 select distinct a 类似的结构么? 你这得到的a的数量 是c 的记录数。。。
maniacstone 2013-08-09
  • 打赏
  • 举报
回复
引用 1 楼 q107770540 的回复:
你的这个SQL语句逻辑有问题吧。。。
说白了就是一对多的联查,然后distinct 出所有的一
q107770540 2013-08-07
  • 打赏
  • 举报
回复
var query=from a in Test
join b in TripLine on a.RefID equals b.ID
join c in TripLinePlan on b.ID equals c.TripLineID into lg
from c in lg.DefaultIfEmpty()
where c.OnlineFlag==1 && c.CreateDate <=Convert.ToDateTime("2013-08-08")
select a;
q107770540 2013-08-07
  • 打赏
  • 举报
回复
你的这个SQL语句逻辑有问题吧。。。

8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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