使用LinqToSql和RIA服务加载子表

时间:2010-09-23 01:31:26

标签: linq-to-sql wcf-ria-services

我在项目上使用LinqToSql,而Ria服务将它作为IQueryable公开。 我想发送我的Product表及其子表(例如ProductStatus,ProductCategory)

要做到这一点,我使用的是标准

public IQueryable ProductSelect() {

DataLoadOptions loadOpts = new DataLoadOptions();
loadOpts.LoadWith<Product>(p => p.ProductStatus);
loadOpts.LoadWith<Product>(p => p.ProductCategory);
this.DataContext.LoadOptions = loadOpts;

return this.DataContext.Products; }

DataLoadOptions loadOpts = new DataLoadOptions(); loadOpts.LoadWith<Product>(p => p.ProductStatus); loadOpts.LoadWith<Product>(p => p.ProductCategory); this.DataContext.LoadOptions = loadOpts; return this.DataContext.Products; }

不幸的是,这是创建内连接,而不是左连接。表上没有引用完整性(我无法添加)。

这意味着如果子表中没有匹配的记录,则不会选择该产品。 有谁知道如何将其更改为左连接?

2 个答案:

答案 0 :(得分:0)

下面的查询怎么样?它会给你一个由3个属性组成的匿名类型。当'left join'产生null时,有些将为null。

  var products= 
        from p in db.Products
        from pc 
        in db.ProductCategory
             .Where(x => x.Id == p.ProductCategoryId)
             .DefaultIfEmpty()
        from ps 
        in db.ProductStatus
             .Where(x => x.Id == p.ProductStatusId)
             .DefaultIfEmpty()
        select new { Product = p, ProductCategory = pc, ProductStatus = ps} 

答案 1 :(得分:0)

找到答案。在DBML文件中,我有表和关联。它与外键ID有关。

如果外键不可为空,那么它会进行内部连接。 如果你使字段可以为空,那么它将进行左连接。