LINQ到亚音速左外连接

时间:2012-03-05 23:40:15

标签: linq linq-to-sql orm subsonic3

我有以下查询:

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 个答案:

答案 0 :(得分:1)

抱歉,当你提出问题时,我错过了这个问题......

SubSonic 3中的左外连接语法略有不同。我发布了一个解决方法作为这个问题的答案:Subsonic 3.0 Left Join

答案 1 :(得分:0)

您好需要做这样的事情,按照以下方式创建一个getter setter:

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();

希望这会有所帮助..