Linq左连接 使用大于小于匹配

DengWanLong 2012-10-26 02:24:04
我现在遇到这样一个问题,我有一张表是记录登陆日志的,里面有个一个IP字段,还有一种IPAddress表记录某段IP所在的区域,这个表里有一个开始Ip和结束IP,表示在这两个IP之间的IP地址都属于这个地区,

现在的问题是用Linq怎么实现 大于小于符号匹配 而不是equals
下面的代码就是我要表达的意思,只不过这么写是不对的 在线等....

var result = from ul in dc.GetTable<UserLog>()
join ip in dc.GetTable<IPAddress>() on ul.LogIp >= ip.StartIP && ul.LogIp <= ip.EndIP
where ul.LogTime >= Convert.ToDateTime(startDate) && ul.OffLineTime <= Convert.ToDateTime(endDate)
select ul;
...全文
450 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
EnForGrass 2012-10-26
  • 打赏
  • 举报
回复
DengWanLong 2012-10-26
  • 打赏
  • 举报
回复
6楼还在吗?
DengWanLong 2012-10-26
  • 打赏
  • 举报
回复
好的谢谢 不过IP是string类型 在Linq中不能比较
q107770540 2012-10-26
  • 打赏
  • 举报
回复

//你可以这样:
var result = from ul in dc.GetTable<UserLog>()
from ip in dc.GetTable<IPAddress>()
where ul.LogIp >= ip.StartIP && ul.LogIp <= ip.EndIP && ul.LogTime >= Convert.ToDateTime(startDate) && ul.OffLineTime <= Convert.ToDateTime(endDate)
select ul;
DengWanLong 2012-10-26
  • 打赏
  • 举报
回复
有没有高手在啊,我很着急啊。
DengWanLong 2012-10-26
  • 打赏
  • 举报
回复
遍历太慢了,还有其他方法吗?
Tragedy 2012-10-26
  • 打赏
  • 举报
回复
遍历dc.GetTable<UserLog>()集合,
dc.GetTable<IPAddress>().Where(x => x.LogTime >= Convert.ToDateTime(startDate)&& ul.OffLineTime <= Convert.ToDateTime(endDate) && .....)
XBodhi. 2012-10-26
  • 打赏
  • 举报
回复
这个你的情 用 linq 的人了,我是不用 linq 这个东西,所以不知道。
DengWanLong 2012-10-26
  • 打赏
  • 举报
回复
补充下,把下面的SQL 转换成Linq就可以了

select ua.NickName,ip.Address,ul.LogTime from UserLog as ul
inner join IPAddress as ip on ul.LogIp >= ip.StartIP and ul.LogIp <= ip.EndIP
inner join UserAccount as ua on ul.UserId = ua.Id

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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