我有 3 个表,我试图使用左连接将它们组合在一起。在我的应用程序中,所有 LINQ 表达式都是查询链格式(lambda 表达式)。
我想弄清楚如何使用 LINQ 完成这个查询;
这是我的 SQL 查询;
select i.INVOICE_NUMBER, ic.CustomerName, o.BusinessUnit
from Invoices_Daily as i
left join intercompany as ic on i.customer_number = ic.customernumber
left join ordertypes as o on i.LINE_ORDERTYPE = o.OrderType
Run Code Online (Sandbox Code Playgroud)
我试过GroupJoin如下组合;
var commissions = data
.GroupJoin(genericNameList,
d => d.CUSTOMER_NUMBER,
g => g.CustomerId,
(d, g) => new { d, generic = g.FirstOrDefault() })
.GroupJoin(intercompanies,
dd => dd.d.CUSTOMER_NAME,
i => i.CustomerId,
(d, i) => new { data = d.d, intercompanies = i.FirstOrDefault() })
.Select(_ => new MainGridViewModel
{
INVOICE_DATE = _.d.INVOICE_DATE,
EndCustomer = _.generic == null ? _.d.CUSTOMER_NAME : _.generic.EndCustomer ?? _.d.CUSTOMER_NAME,
LINE_ORDERTYPE = _.i.OrderType
})
.ToList();
Run Code Online (Sandbox Code Playgroud)
但是我有一个写在下面的语法错误;
错误 CS0411 无法从用法推断方法“Enumerable.GroupJoin(IEnumerable, IEnumerable, Func, Func, Func, TResult>)”的类型参数。尝试明确指定类型参数。
我根据请求编写了一个测试示例,显示了正确的语法,这应该都有效。
public class Data
{
public string CUSTOMER_NUMBER { get; set; }
public string CUSTOMER_NAME { get; set; }
}
public class NameList
{
public string CustomerId { get; set; }
}
public class InterCompanies
{
public string CustomerId { get; set; }
}
public class Test
{
public void TMP()
{
var data = new List<Data>();
var genericNameList = new List<NameList>();
var intercompanies = new List<InterCompanies>();
var commissions = data
.GroupJoin(genericNameList,
d => d.CUSTOMER_NUMBER,
g => g.CustomerId,
(d, g) => new { d, generic = g.FirstOrDefault() })
.GroupJoin(intercompanies,
dd => dd.d.CUSTOMER_NAME,
i => i.CustomerId,
(d, i) => new { data = d.d, intercompanies = i.FirstOrDefault() })
.ToList();
}
}
Run Code Online (Sandbox Code Playgroud)
我最初的想法是您 CUSTOMER_NUMBER 和 CUSTOMER_NAME 是错误的,因为为什么您在同一个类中有 2 个字段具有相同的值。但是既然你向我保证他们是正确的,也许你正在交换联接中数据的预期字段的顺序,如果没有看到你的数据模型就很难判断。
也许你的第二次加入应该是这样的:
.GroupJoin(intercompanies,
dd => dd.d.CUSTOMER_NUMBER,
i => i.CUSTOMER_NAME,
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9202 次 |
| 最近记录: |