linq to entity join on string equals int

时间:2012-03-29 17:20:49

标签: asp.net linq

我看过这篇文章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语句时,它获得了此人的信息。

有谁知道为什么。谢谢

2 个答案:

答案 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()

相关问题