C# - 左外连接lambda表达式错误

时间:2016-02-18 13:24:33

标签: c# lambda left-join

我有以下表格:

Table1
{
    Code   //string
    Desc   //string
}

Table2
{
    Code   //string
    Value  //decimal?
}

我需要左连接表,并且对于每个Table2代码/值缺失,我想显示Code = Table1.Code,Desc = Table1.Desc和Value = null或空白。

我尝试了以下lambda表达式:

      var result = Table1.GroupJoin(
                  Table2,
                  x => x.Code,
                  y => y.Code,
                  (x, y) => g
                      .Select(c => new { x.Code, x.Desc, Value = y.Value })
                      .DefaultIfEmpty(new { x.Code, x.Desc, Value = null }))
                      .SelectMany(g => g);

并得到了这些错误:
方法的类型参数' System.Linq.Enumerable.DefaultIfEmpty(System.Collections.Generic.IEnumerable,TSource)'无法从使用中推断出来。尝试明确指定类型参数。

无法分配到匿名类型属性

所以,我改变了... DefaultIfEmpty ... Value = 0} ...

并且遇到了这些错误: 的 ' System.Collections.Generic.IEnumerable'不包含' DefaultIfEmpty'的定义和最好的扩展方法重载' System.Linq.Queryable.DefaultIfEmpty(System.Linq.IQueryable,TSource)'有一些无效的论点

实例参数:无法转换为System.Collections.Generic.IEnumerable'到' System.Linq.IQueryable'

有任何解决错误的想法吗?

1 个答案:

答案 0 :(得分:4)

您只需在匿名类型初始值设定项中指定null值的类型:

.DefaultIfEmpty(new { x.Code, x.Desc, Value = (decimal?) null }))

当您使用0时,您创建了一个单独的匿名类型,其Value属性类型为int,而不是decimal?