我在项目上使用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; }
不幸的是,这是创建内连接,而不是左连接。表上没有引用完整性(我无法添加)。
这意味着如果子表中没有匹配的记录,则不会选择该产品。 有谁知道如何将其更改为左连接?
答案 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有关。
如果外键不可为空,那么它会进行内部连接。 如果你使字段可以为空,那么它将进行左连接。