我需要向LINQ表达式中添加动态数量的Join操作。该数字是DemHeaderIDs
数组的大小。联接包括一个Where
子句,该子句的参数取自DemoHeaderIDs
数组。在第一组中使用DemoHeaderIDs[0]
可以正常工作。但是当尝试在循环中使用DemoHeaderID[i]
时,我收到以下错误消息。
当我使用硬编码的整数而不是DemoHeadersID[i]
时,代码运行良好并且结果正确。
我的代码:
private void DoSomething(int[] DemoHeaderIDs, OVContext _context)
{ //first set of joins
var q = from oh in _context.OrgHierarchy
join odd in _context.OrgDemoData on oh.Identifier equals odd.Identifier
join dh in _context.DemoHeader.Where(h => h.DemoHeaderId == DemoHeaderIDs[0]) on odd.Demoheaderid equals dh.DemoHeaderId
select new
{
Name = odd.Demovalue,
Parent = "All",
Identifier = oh.Identifier
};
for (int i = 1; i < DemoHeaderIDs.Count(); i += 1)
{ //dynamic joins
q = from qObj in q
join odd in _context.OrgDemoData on qObj.Identifier equals odd.Identifier
join dh in _context.DemoHeader.Where(h => h.DemoHeaderId == DemoHeaderIDs[i]) on odd.Demoheaderid equals dh.DemoHeaderId
select new
{
Name = odd.Demovalue,
Parent = qObj.Name,
Identifier = qObj.Identifier
};
}
var ql = q.ToList();
错误消息:
System.IndexOutOfRangeException:索引超出了 数组。在lambda_method(Closure)在 Microsoft.EntityFrameworkCore.Query.ExpressionVisitors.Internal.ParameterExtractingExpressionVisitor.Evaluate(Expression 表达式,String&parameterName)
在DbContext配置中添加EnableSensitiveDataLogging()
不会在消息中添加信息。
我正在使用EntityFramework.Core 2.2。
答案 0 :(得分:0)
确实做到了这一点:
添加了int Index=i;
,然后将DemoHeadersID[i]
替换为DemoHeadersID[index]
你生活和学习。