强制EF在SQL字符串中生成CAST

时间:2017-01-26 22:10:01

标签: c# sql-server entity-framework linq

我需要强制实体框架使用CAST(x as varchar(10))生成SQL。一列是varchar(10),另一列是nvarchar(100)

我的LINQ看起来像这样:

var results =
  db.User
    .Join(db.Stuff, 
       u => u.MetaTag, 
       s => s.StuffCode,
    (a, b) => a.StuffLongName)

我需要这样的SQL:

SELECT Stuff.StuffLongName 
FROM User
INNER JOIN Stuff
    ON   CAST(User.MetaTag AS VARCHAR(10))  = Stuff.Stuffcode
 ;

如果您问我“为什么?”,当字符串不是varchar时,SQL优化器会使用效率低下的计划。

我已经尝试过像这样的EF模型标签

...
[Column(TypeName = "VARCHAR")]
[MaxLength(10)]
public string MetaTag
...

我能够得到EF的唯一变化就是SUBSTRING(MetaTag,1,30) ......但是优化器并没有意识到这一点。

我的替代方案看起来像一个原始SQL字符串,或者使用存储过程。

0 个答案:

没有答案