相关疑难解决方法(0)

为什么Entity Framework 6会为简单查找生成复杂的SQL查询?

我有这个LINQ查询

dbContext.Customers.Where(c => c.AssetTag == assetTag).Count();
Run Code Online (Sandbox Code Playgroud)

要么

(from c in dbContext.Customers
 where c.AssetTag == assetTag
 select c).Count();
Run Code Online (Sandbox Code Playgroud)

生成的SQL是

SELECT 
[GroupBy1].[A1] AS [C1]
FROM ( SELECT 
    COUNT(1) AS [A1]
    FROM [dbo].[Customer] AS [Extent1]
    WHERE (([Extent1].[AssetTag] = @p__linq__0) AND ( NOT ([Extent1].[AssetTag] IS NULL    OR @p__linq__0 IS NULL))) OR (([Extent1].[AssetTag] IS NULL) AND (@p__linq__0 IS NULL))
)  AS [GroupBy1]
Run Code Online (Sandbox Code Playgroud)

那么为什么LINQ会为一个简单的where语句生成如此复杂的SQL呢?

c# sql linq entity-framework

7
推荐指数
4
解决办法
4881
查看次数

我需要加快以下Linq查询

我有一个旧的存储过程我正在重写为EF Linq查询但是proc几乎快了3倍!

这是查询语法的示例:

public string GetStringByID(long ID)
    {
        return dataContext.Table2.FirstOrDefault(x => x.Table2ID == ID).Table1.StringValue;
    }
Run Code Online (Sandbox Code Playgroud)

这是我正在使用的sproc代码以及调用它的方法.

sproc是:

PROCEDURE [dbo].[MyQuickerProc]
@ID bigint
AS
BEGIN
SET NOCOUNT ON;

IF EXISTS(SELECT TOP 1 ID FROM Table2 WHERE Table2ID = @Id)
    BEGIN
        SELECT TOP 1 t1.StringValue
        FROM Table2  t2
            INNER JOIN Table1 t1 ON t1.Table1ID= Table2.Table1ID
        WHERE Table2ID = @ID
    END
ELSE
    BEGIN
        SELECT TOP 1 t1.StringValue
        FROM Table2 t2
            INNER JOIN Table1 t1 ON t1.Table1Id = Table2.Table1ID
        WHERE Table2ID IS NULL
    END

END …
Run Code Online (Sandbox Code Playgroud)

c# sql linq entity-framework

3
推荐指数
1
解决办法
980
查看次数

标签 统计

c# ×2

entity-framework ×2

linq ×2

sql ×2