Загрузка дочерних таблиц с помощью LinqToSql и RIA - PullRequest
0 голосов
/ 23 сентября 2010

Я использую LinqToSql для проекта, а службы Ria выставляют его как IQueryable.Я хочу отправить таблицу Product вместе с дочерними таблицами (например, ProductStatus, ProductCategory)

. Для этого я использую стандарт

public IQueryable ProductSelect() {</p> <pre><code>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 голосов
/ 23 сентября 2010

Нашел ответ.В файле DBML, где у меня есть таблицы и ассоциации.Он связан с идентификаторами внешнего ключа.

Если внешний ключ не имеет значения NULL, он выполняет внутреннее соединение.если вы сделаете поле обнуляемым, тогда оно выполнит левое соединение.

0 голосов
/ 23 сентября 2010

Как насчет запроса ниже? Это даст вам анонимный тип, состоящий из 3 свойств. Некоторые из них будут нулевыми, когда «левое соединение» привело бы к нулю.

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