【发布时间】:2017-04-20 18:41:37
【问题描述】:
我需要像这样使用 System.Linq.Dynamic 动态生成 SQL 查询:
SELECT
[Extent1].[FromRevision] AS [FromRevision],
[Extent1].[Field1] AS [Field1],
[Extent1].[TillRevision] AS [TillRevision],
[Extent1].[Field2] AS [Field2],
[Extent1].[Date1] AS [Date1],
[Extent1].[LastChangeDate] AS [LastChangeDate],
[Extent1].[Field3] AS [Field3]
FROM [log].[MyTable] AS [Extent1]
WHERE (([Extent1].[FromRevision] <= @p__linq__0) AND ([Extent1].[TillRevision] > @p__linq__1) AND
( NOT EXISTS (SELECT
1 AS [C1]
FROM [log].[MyTable] AS [Extent2]
WHERE ([Extent2].[Field1] = [Extent1].[Field1]) AND ([Extent2].[FromRevision] <= @p__linq__2) AND ([Extent2].[TillRevision] > @p__linq__3)
)))
上面的代码是由 Linq 为通用 IQueryable 生成的,像这样:
query.Where(o =>
//ADDED
( o.FromRevision <= tillRevision &&
o.TillRevision > tillRevision &&
!query.Any(o1 =>
o1.Uid == o.Uid &&
o1.FromRevision <= fromRevision &&
o1.TillRevision > fromRevision)
)
但是是否有可能使用 Dynamic Linq 而不是通用的 IQueryable 获得相同的结果、相同的 SELECT 结果?
【问题讨论】:
-
您是否有理由需要使用 Dynamic Linq 而不是自己构建表达式?
-
是的,我在设计时不知道这个构造函数、过滤器等会有什么类型。
标签: c# sql linq dynamic-linq