标签: generated-sql

从一个查询中获取最大值和最小值,并尽可能获得最佳查询

我知道这个问题,但我想做的是获得接近这个生成的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)

c# linq entity-framework generated-sql

10
推荐指数
3
解决办法
9503
查看次数

实体框架 - 使用toTraceString查看Sql

我正在尝试查看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中执行此操作的新方法是什么?

logging entity-framework generated-sql entity-framework-5

8
推荐指数
1
解决办法
7424
查看次数

这两个LINQtoSQL语句之间有什么区别?

这两个语句在逻辑上与我看起来相同,但它们导致生成不同的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)

c# iqueryable linq-to-sql generated-sql

5
推荐指数
1
解决办法
203
查看次数

Linq为什么忽略我的where子句?

我已经看到了几个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)

c# sql linq generated-sql azure-sql-database

5
推荐指数
1
解决办法
557
查看次数