【问题标题】:SQL to LINQ with an IN clause带有 IN 子句的 SQL to LINQ
【发布时间】:2019-04-02 16:50:01
【问题描述】:

背景:

我的数据库中有一个表,用于记录对各种 Web 服务的调用。

每个日志条目都由一个 GUID (CorrelationID) 链接,该 GUID 链接特定 Web 请求的所有日志条目。

在日志中搜索特定数据(例如人名)时,我可能会得到一个包含该信息的日志条目,但我想显示与同一请求相关的所有日志条目。

目前:

为了在 SQL 中获得所需的结果,我使用了这个查询:

SELECT * FROM Logging WHERE CorrelationId IN (SELECT DISTINCT CorrelationId FROM Logging WHERE Message like '%fred%') ORDER BY Datetime

问题:

我想将此查询转换为 LINQ to Entities。

我现在只有主选择

var records = db.Loggings.Where(x => x.Datetime >= fromDate && x.Datetime < toDate)
                .Where(x => x.Message.Contains("fred"))
                .OrderBy(x => x.Datetime).AsQueryable();

我无法找出添加 IN 部分的正确语法。

我已关注其他类似问题的 SO 答案,但仍然无法使其适用于我的特定场景。

【问题讨论】:

  • LINQ subquery IN的可能重复
  • 您是否尝试过进行两个不同的查询?
  • @Halhex 是的,我试过了,根据第一个查询的结果完成第二个查询非常慢。
  • 您使用了两次记录(记录 = 记录)。实体数据库类似于 dbEntity.TableName
  • @Bandito 你能显示你尝试的代码吗?

标签: c# sql entity-framework linq


【解决方案1】:

做这样的工作:

var subQuery = records.Where(x => x.Datetime >= fromDate && x.Datetime < toDate && x.Message.Contains("fred")).Select(x => x.CorrelationID).Distinct();

var result = records.Where(x => subQuery.Contains(x.CorrelationID)).OrderBy(x => x.Datetime).AsQueryable();

【讨论】:

    猜你喜欢
    • 2011-06-16
    • 2010-10-25
    • 2023-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-22
    • 2010-09-30
    相关资源
    最近更新 更多