左外连接lambda表达式错误
我有以下表格:
Table1
{
Code //string
Desc //string
}
Table2
{
Code //string
Value //decimal?
}
我需要左加入表和每个表2 Code / Value missing我想要显示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'
任何想法来解决错误?
您只需要在匿名类型初始值设定项中指定null
值的类型即可:
.DefaultIfEmpty(new { x.Code, x.Desc, Value = (decimal?) null }))
当你使用0时,你创建了一个单独的匿名类型,它具有int
类型的Value
属性,而不是decimal?
。