相关疑难解决方法(0)

tinyint列的生成查询将CAST引入int

我正在查询tinyint列,实体框架生成一个SELECT查询,该查询为此列引入了CAST到INT,即使我在WHERE子句中使用的值是字节类型.

查看模型,我的tinyint列生成的Type是byte.

看代码:

byte byteValue = 6;
var entityList = from r in rep.DataContext.FooTable
                 where r.TinyintColumn == byteValue
                 select r;
Run Code Online (Sandbox Code Playgroud)

查看生成的查询:

SELECT [Extent1].[TinyintColumn] AS [TinyintColumn] WHERE @p__linq__0 = CAST( [Extent1].[TinyintColumn] AS int) 
Run Code Online (Sandbox Code Playgroud)

我对性能有严格的限制,所以我不希望任何选择中的那些CAST.

所以我的问题是,有没有办法避免这个CAST超过列tinyint?或者我做错了什么?

提前致谢.

c# sql-server entity-framework

15
推荐指数
2
解决办法
7251
查看次数

表达式树 - 不必要的转换为int32

表达式树在处理字节和短路时似乎构建了不必要的转换,它们将双方(例如二进制表达式)转换为int32.

这是我见过的一些Linq提供程序中的一个问题,每个都必须剥离这个冗余层才能获得原始表达式.(NHibernate不会删除此层并在SQL查询中创建可怕的CAST).

// no conversion
Console.WriteLine((Expression<Func<int, int, bool>>) ((s, s1) => s == s1));
// converts to int32
Console.WriteLine((Expression<Func<short, short, bool>>) ((s, s1) => s == s1));
// converts to int32
Console.WriteLine((Expression<Func<byte, byte, bool>>) ((s, s1) => s == s1));
Run Code Online (Sandbox Code Playgroud)

如果您尝试构建一个能够进行精确比较的表达式(没有转换),那么您将获得成功.

所以问题是,这种行为的原因是什么?

EDIT .net 4.0 64bit,同样适用于4.5 64bit

c# linq nhibernate expression-trees

12
推荐指数
2
解决办法
985
查看次数

禁用 CAST AS 以优化实体框架中的查询

我正在使用Entity Framework 5,我想从Oracle 10g数据库中选择数据。问题是数据库表很大,Entity Framework生成的查询无效。我想摆脱那些CAST( [column] AS [type] )。有什么设置可以关闭它们吗?

C#代码:

var context = new APPDB();
var q = context.APP_TABLE.Where(i => i.ID == 123);

// This is how I did get the generated SQL query
var str = ((System.Data.Objects.ObjectQuery) q ).ToTraceString();
Run Code Online (Sandbox Code Playgroud)

生成的查询:

SELECT 
 CAST( "Extent1"."ID" AS number(10,0)) AS "C1", 
"Extent1"."DESCRIPTION" AS "DESCRIPTION"
FROM "APP"."APP_TABLE" "Extent1"
WHERE (123 = ( CAST( "Extent1"."ID" AS number(10,0))))
Run Code Online (Sandbox Code Playgroud)

我想要的是生成性能更好的查询的代码:

SELECT 
"Extent1"."ID" AS "C1", 
"Extent1"."DESCRIPTION" AS "DESCRIPTION"
FROM "APP"."APP_TABLE" …
Run Code Online (Sandbox Code Playgroud)

c# sql oracle entity-framework

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