LINQ 嵌套查询问题 - System.NotSupportedException

LINQ nested query issue - System.NotSupportedException

我正在尝试在 LINQ 中重现以下 SQL 查询:

select *
  from dbo.events_log 
 where std_datetimeseq < '2014011523:49:00001'
   and logname in ('S', 'D', 'O')
   and std_datetimeseq = (
       select min(std_datetimeseq)
         from dbo.events_log
        where std_datetimeseq < '2014011523:49:00001'
          and logname in ('S', 'D', 'O'))

这是我的:

from e in _context.EventLogs
                    where e.std_datetimeseq.CompareTo(stdDateTimeSeq) < 0
                      && eventMessage.Content.EquipToSearch.Contains(e.logname)
                      && e.std_datetimeseq.CompareTo(
                      ((from e2 in _context.EventLogs
                        where e2.std_datetimeseq.CompareTo(stdDateTimeSeq) < 0
                            && eventMessage.Content.EquipToSearch.Contains(e2.logname)
                        select e2).Min().std_datetimeseq)) == 0
                           select e

我一直收到这个异常:

{"The specified method 'MyEntityModel.EventLog Min[EventLog](System.Linq.IQueryable`1[HDSREntityDataModelNS.EventLog])' 
on the type 'System.Linq.Queryable' cannot be translated into 
a LINQ to Entities store expression because no overload matches the passed arguments."}

我不知道出了什么问题。

eventMessage.Content.EquipToSearch 是一个包含 "S"、"D"、"O" 的列表。 LINQ 违背 entity framework.

谢谢

子查询有问题

(from e2 in _context.EventLogs
 where e2.std_datetimeseq.CompareTo(stdDateTimeSeq) < 0
    && eventMessage.Content.EquipToSearch.Contains(e2.logname)
 select e2).Min().std_datetimeseq

为了获得最小 std_datetimeseq 值,您必须 select 它,否则您将试图找到最小 EventLogs 项,这不仅没有意义,但不能被 EF 翻译成 SQL。而是执行以下操作。

(from e2 in _context.EventLogs
 where e2.std_datetimeseq < stdDateTimeSeq
    && eventMessage.Content.EquipToSearch.Contains(e2.logname)
 select e2.std_datetimese).Min()

附带说明一下,如果您只使用比较运算符而不是 Servy 建议的 CompareTo,您的查询将更易于阅读。