诠释?在Linq问题中LEFT OUTER JOIN时的int和int比较

Dan*_*nte 0 c# linq linq-to-sql

我正在开发一个需要使用的WinForms项目Linq-To-Sql.我已经能够使用该SqlMetal工具创建我的DataContext ,并进行一些查询.但是现在我遇到了一个我无法解决的问题.

我想做一个LEFT OUTER JOIN如下:

MyDatabase db = new MyDatabase(...);

 var query = from p in db.ParentTable
             join t in db.ChildTable on new {A = p.child_ID, B = p.OtherID}
             equals new {A = t.ID, B = t.OtherID} into j1
             from c in j1.DefaultIfEmpty()
             select new
             {
                  ...
             };
Run Code Online (Sandbox Code Playgroud)

当我编写此查询时,在编译时会在join单词中引发错误:

join子句中某个表达式的类型不正确.调用'GroupJoin'时类型推断失败

我知道这个错误是由之间的比较造成p.child_ID而且t.ID因为p.child_IDint?t.IDint.但是,我该如何解决这个问题呢?如何在LEFT OUTER JOIN没有此错误的情况下执行?

p.child_IDint?因为这列被标记为IS NULLSQL.

希望有人可以帮助我,提前谢谢.

Kun*_*han 6

您可以使用GetValueOrDefault()方法.它检索当前Nullable对象的值或对象的默认值.

就你的例子而言:

var query = from p in db.ParentTable
            join t in db.ChildTable on new {A = p.child_ID.GetValueOrDefault(0), B = p.OtherID}
            equals new {A = t.ID, B = t.OtherID} into j1
            from c in j1.DefaultIfEmpty()
            select new
            {
                ...
            };
Run Code Online (Sandbox Code Playgroud)

如果p.child_ID变为null,则返回0.希望这会有所帮助!!