Другой автор ответил, почему, но не что делать. Причина в том, что вызов метода не может быть преобразован Linq-to-SQL в SQL, поскольку он ... не является частью SQL! Это имеет смысл! Итак, простой способ исправить это:
public IQueryable<BvIndexRow> GetBenefitVariableIndex(int healthPlanId)
{
var q = (... your query ...
select new BvIndexRow
{
Type = (bv.Private.ToLower() == "y" ? "Private " : "Public ") + (bao.ba_system_variable_ind ? "System" : "Benefit"),
Class = bv.Variable_Classification,
ServiceType = bvst.Service_Type.Service_Type_Name ?? string.Empty,
LineOfBusiness = bv.LOB,
Status = bv.Status.ToLower() == "p" ? "Production" : "Test",
Name = bao.ba_object_Code,
Description = bao.ba_Object_Desc,
Id = bv.Variable_Id,
}).ToArray();
foreach (var bvIndexRow in q) {
bvIndexRow.ValidCodes = GetValidCodes(bvIndexRow .Variable_Id);
}
return q;
}
Это должно дать вам, что вы хотите!
РЕДАКТИРОВАТЬ: Кстати, вы, вероятно, также хотите вызвать .ToList () или .ToArray () в вашем списке BvIndexRows. Это приводит к немедленной оценке и предотвращает многократное перечисление. Если вы не хотите немедленной оценки, вам, возможно, придется изменить свой вопрос, чтобы объяснить, почему это так. Я добавил .ToArray () в приведенный выше пример, но я также хотел объяснить, почему!