0

我正在开发一个需要使用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
             {
                  ...
             };

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

join 子句中的表达式之一的类型不正确。调用“GroupJoin”时类型推断失败

p.child_ID我知道这个错误是由and t.IDsince p.child_IDisint?t.IDis之间的比较引起的int。但是,我该如何解决这个问题?我怎样才能在LEFT OUTER JOIN没有这个错误的情况下执行?

p.child_IDint?因为此列标记IS NULLSQL

希望有人可以帮助我,在此先感谢。

4

2 回答 2

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
            {
                ...
            };

如果 p.child_ID 变为空,它将返回 0。希望这会有所帮助!

于 2012-09-13T17:28:43.250 回答
4
于 2012-09-13T18:19:29.153 回答