我知道这个问题,但我想做的是获得接近这个生成的SQL的东西:
select MAX(Column), MIN(Column) from Table WHERE Id = 1
Run Code Online (Sandbox Code Playgroud)
当我尝试这个:
var query = from d in db.Table
where d.Id == 1
select new
{
min = db.Table.Max(s => s.Column),
max = db.Table.Min(s => s.Column)
};
Run Code Online (Sandbox Code Playgroud)
生成的sql如下所示:
SELECT
[Extent1].[Id] AS [Id],
[GroupBy1].[A1] AS [C1],
[GroupBy2].[A1] AS [C2]
FROM [dbo].[Table] AS [Extent1]
CROSS JOIN (SELECT
MAX([Extent2].[Column]) AS [A1]
FROM [dbo].[Table] AS [Extent2] ) AS [GroupBy1]
CROSS JOIN (SELECT
MIN([Extent3].[Column]) AS [A1]
FROM [dbo].[Table] AS [Extent3] ) AS [GroupBy2]
WHERE …Run Code Online (Sandbox Code Playgroud) 我正在尝试查看Entity Framework 5.0从实体查询生成的生成的sql.在整个Web上(例如)每个人都说要将IQuerable对象强制转换为ObjectQuery对象,然后使用toTraceString()方法返回生成的查询.
但是我一直收到一个无效的案例例外:
Unhandled Exception: System.InvalidCastException: Unable to cast object of type
'System.Data.Entity.Infrastructure.DbQuery`1[System.String]' to type 'System.Data.Objects.ObjectQuery'.
Run Code Online (Sandbox Code Playgroud)
在Entity Framework 5中执行此操作的新方法是什么?
这两个语句在逻辑上与我看起来相同,但它们导致生成不同的SQL:
#1
var people = _DB.People.Where(p => p.Status == MyPersonEnum.STUDENT.ToString());
var ids = people.Select(p => p.Id);
var cars = _DB.Cars.Where(c => ids.Contains(c.PersonId));
#2
string s = MyPersonEnum.STUDENT.ToString();
var people = _DB.People.Where(p => p.Status == s);
var ids = people.Select(p => p.Id);
var cars = _DB.Cars.Where(c => ids.Contains(c.PersonId));
Run Code Online (Sandbox Code Playgroud)
示例#1不起作用,但示例#2起作用.
生成的var people查询SQL对于两者都是相同的,但最终查询中的SQL 不同,如下所示:
#1
SELECT [t0].[PersonId], [t0].[etc].....
FROM [Cars] AS [t0]
WHERE EXISTS(
SELECT NULL AS [EMPTY]
FROM [People] AS [t1]
WHERE ([t1].[Id] = [t0].[PersonId]) AND ([t1].[Status] = …Run Code Online (Sandbox Code Playgroud) 我已经看到了几个StackOverflow问题,但它们似乎与我的情况不符.我保证我看了.
我对我的数据库有一些查询,我正在使用linq来做,我无法弄清楚为什么生成错误的SQL.这在我的代码中的几个地方发生.我希望我们只是陷入一些众所周知的陷阱,但我无法理解为什么Linq似乎决定我的where子句是愚蠢的,不应该将它添加到生成的SQL查询中.
为什么是这样?
例:
var testing = (from i in context.TableName1 where i.Param1 == object1.GuidParam select i).ToList();
Run Code Online (Sandbox Code Playgroud)
以上查询返回以下SQL
{SELECT
[Extent1].[RecordId] AS [RecordId],
[Extent1].[AnotherId] AS [AnotherId],
[Extent1].[YetAnotherId] AS [YetAnotherId],
[Extent1].[WeLikeIds] AS [WeLikeIds],
[Extent1].[WeReallyLikeIds] AS [WeReallyLikeIds]
FROM [dbo].[SomeTable] AS [Extent1]}
Run Code Online (Sandbox Code Playgroud)
但是以下查询:
var testing = (from i in context.TableName1 where i.Param1 == object1.GuidParam select i);
var testingToList = testing.ToList();
Run Code Online (Sandbox Code Playgroud)
生成以下正确的SQL
{SELECT
[Extent1].[RecordId] AS [RecordId],
[Extent1].[AnotherId] AS [AnotherId],
[Extent1].[YetAnotherId] AS [YetAnotherId],
[Extent1].[WeLikeIds] AS [WeLikeIds],
[Extent1].[WeReallyLikeIds] AS [WeReallyLikeIds]
FROM [dbo].[SomeTable] AS [Extent1]
WHERE [Extent1].[RecordId] = …Run Code Online (Sandbox Code Playgroud)