【问题标题】:How to add less than or equal to condition in linq inner join如何在linq内部连接中添加小于或等于条件
【发布时间】:2020-01-07 17:25:10
【问题描述】:

我们有两个对象,DatesActiveEvents。想要在 linq 中以小于或等于条件对这些执行内部连接。与以下 SQL 的 ref 相同,其中考虑 #Tables 是 C# 对象

Select A. from #Activities A
Inner Join #Dates D ON A.ActivityDate <= D.ProcessDate

在下面尝试过,但没有给出正确的结果。

 var filteredActivity = (from e in ActiveEvents
            from p in dates
            where e.ActivityDate <= p.Date
            select new ActiveEvent
            {
                ActivityDate = p.Date,
                EventId = e.EventId
            }).ToList();

  var filteredActivity = (from e in ActiveEvents
            from p in dates.Where(r => e.ActivityDate <= r)
            select new ActiveEvent
            {
                ActivityDate = p.Date,
                EventId = e.EventId
            }).ToList();

您能建议任何更好的方法吗?

【问题讨论】:

  • 连接在哪里?
  • 你的 SQL 应该等同于Select * From Activities A, Dates D Where A.ActivityDate &lt;= D.ProcessDate,所以第一个 Linq 查询应该做你想做的事。它究竟是如何给出错误的结果。

标签: c# linq linq-to-sql


【解决方案1】:

你可以试试这个方法

var filteredActivity = (from e in ActiveEvents
        join p in dates
        where e.ActivityDate <= p.ProcessDate 
        select new ActiveEvent
        {
            ActivityDate = p.Date,
            EventId = e.EventId
        }).ToList();

P/s:理想情况下,两个表之间应该包含 foreign key 以像这样加入 join p in dates on e.Key equals p.ForeignKey

【讨论】:

    【解决方案2】:

    根据您的示例,查询正在过滤 ProcessDate,但您的 linq 查询正在过滤 p.Date。是同一个领域吗?你给出的第一个例子应该是正确的。

    【讨论】:

    • 这会更好作为评论,因为您要求澄清。如果是这种情况,那么问题应该作为错字关闭。
    猜你喜欢
    • 2016-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-20
    • 1970-01-01
    • 2018-12-20
    相关资源
    最近更新 更多