从SQL到LINQ的IN子句

时间:2019-04-02 16:50:02

标签: c# sql entity-framework linq

背景:

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

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

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

当前:

要在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部分的正确语法。

我已经遵循了其他类似问题的答案,但是仍然无法使它适用于我的特定情况。

1 个答案:

答案 0 :(得分:2)

做这样的工作:

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();