回答

收藏

如何强制LINQ to SQL对可为空的外键执行INNER JOIN?

技术问答 技术问答 237 人阅读 | 0 人回复 | 2023-09-12

我有一个非常简单的设置。表节点有一个空外键3 @2 L! o# p, ^6 [0 I. s
ObjectId。这在我的数据库模型中使用一对多相关性。现在,我想运行一个查询,为我提供特定的对象ID所有节点对象。SQL中,这很简单:# c) }0 s& h! w+ E$ `$ T
SELECT Node.*,Object.*FROM Node INNER JOIN Object    ON Node.ObjectId = Object.ObjectIdWHERE Node.ObjectId = @objectId但现在我想LINQ to SQL做同样的事:
; Q9 ]& d/ ~% n: \3 l' ^private static Func> _queryGet =        CompiledQuery.Compile(               (MyDataContext context,string objectId) =>                (from node in context.DataNodes                 where node.ObjectId == objectId                 select node));var loadOptions = new DataLoadOptions();loadOptions.LoadWith(node => node.DataObject);context.LoadOptions = loadOptions;DataNode node = _queryGet.Invoke(context,objectId).FirstOrDefault();...令人沮丧的是,令人沮丧的是,LINQ 总是    为此生成一个查询LEFT OUTER JOIN,而且我尝试过的事情都没有什么不同。# H3 R  }& q" J" W6 x. k
从表面上看,这似乎是合理的。ObjectId外键是空的,所以有些节点不会相关。但在查询中,我提供了一个对象ID。我对没有相关对象的节点不感兴趣。
3 i1 J+ z* ]3 Z* |0 V8 B+ M. P6 }在这种情况下,INNER JOIN这是正确的做法,但如何说服呢?LINQ?
3 l8 F/ H2 i. l) j                                                               
& d" i9 t7 a* X1 W& y: u+ o- `    解决方案:
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则