LINQ to Subsonic Left Outer Join - PullRequest
0 голосов
/ 06 марта 2012

У меня следующий запрос:

var q = from x in content_item.All()
        join y in vendor.All() on x.Vendor_ID equals y.Vendor_ID into tmp
        from v in tmp.DefaultIfEmpty()
        select new { Z=x.Content_Item_Name,W=((v!=null)?v.Vendor_Name:"")};

, когда я набираю:

var items = q.ToList();

Я получил следующее исключение:

Expression of type 'System.Collections.Generic.IEnumerable`1[Vamp.Models.content_item]' cannot be used for parameter of type 'System.Linq.IQueryable`1[Vamp.Models.content_item]' of method 'System.Linq.IQueryable`1[<>f__AnonymousType0`2[Vamp.Models.content_item,System.Collections.Generic.IEnumerable`1[Vamp.Models.vendor]]] GroupJoin[content_item,vendor,Nullable`1,<>f__AnonymousType0`2](System.Linq.IQueryable`1[Vamp.Models.content_item], System.Collections.Generic.IEnumerable`1[Vamp.Models.vendor], System.Linq.Expressions.Expression`1[System.Func`2[Vamp.Models.content_item,System.Nullable`1[System.UInt32]]], System.Linq.Expressions.Expression`1[System.Func`2[Vamp.Models.vendor,System.Nullable`1[System.UInt32]]], System.Linq.Expressions.Expression`1[System.Func`3[Vamp.Models.content_item,System.Collections.Generic.IEnumerable`1[Vamp.Models.vendor],<>f__AnonymousType0`2[Vamp.Models.content_item,System.Collections.Generic.IEnumerable`1[Vamp.Models.vendor]]]])'

Есть идеи?

Примечание: content_item.All () является IQueryable, а vendor.All () является IQueryable

Ответы [ 2 ]

1 голос
/ 06 апреля 2012

Извините, я пропустил этот вопрос, когда вы его задали ...

Синтаксис левого внешнего соединения в SubSonic 3 немного отличается.У меня есть ответ на этот вопрос: Subsonic 3.0 Left Join

0 голосов
/ 06 марта 2012

Привет, тебе нужно сделать что-то вроде этого, создать метод установки геттеров следующим образом:

public class ReturnProperty
{
      public string Z{ get; set; }
      public string W{ get; set; }

}

И изменить свой запрос следующим образом:

var q = from x in content_item.All()
                join y in vendor.All() on x.Vendor_ID equals y.Vendor_ID into tmp
                from v in tmp.DefaultIfEmpty()
                select new ReturnProperty { Z=x.Content_Item_Name,W=((v!=null)?v.Vendor_Name:"")};
var items = q.ToList();

Надеюсь, это поможет ..

...