我看过这篇文章Linq int to string,并试了一下
var personalInfoQuery = from t in crnnsupContext.Tombstones
join i in crnnsupContext.InitialEducations on t.InitialEducation equals SqlFunctions.StringConvert((double)i.InitalEducationID)
where t.RegNumber == 25952
select new CPersonalInfo
{
Tombstone = t,
InitialEducation = i
};
数据库t.InitialEducation
中的是char,i.InitalEducationID
是int,但检索的结果为null。我很确定SQL服务器中的值不为空。所以我认为问题是SqlFunctions.StringConvert((double)i.InitalEducationID)
当我删除join语句时,它获得了此人的信息。
有谁知道为什么。谢谢
答案 0 :(得分:1)
终于找到了原因!!
t.InitialEducation
在数据库中是 nvarchar(1),i.InitalEducationID
是 int ,在我修改为SqlFunctions.StringConvert((double)i.InitialEducationID, 1)
之后就可以了!
“1”是返回字符串的长度,默认长度为10,我猜有一些额外的空间。
答案 1 :(得分:0)
由于您使用的是SqlFunctions.StringConvert
方法,我假设您使用EF作为底层LINQ提供程序,不是吗?
根据给出的信息,您似乎希望在这些属性上进行1对多的连接。您编写的代码可以合并(在上下文中没有足够的信息确定)作为SQL中的INNER JOIN,因此要强制LEFT JOIN行为,您可以添加.DefaultIfEmpty()
调用:
crnnsupContext.InitialEducations.DefaultIfEmpty()