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
,您的查询将更易于阅读。
我正在尝试在 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
,您的查询将更易于阅读。