我需要强制实体框架使用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字符串,或者使用存储过程。