Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从linq查询调用函数时出错_C#_Linq_Linq To Sql_Generics - Fatal编程技术网

C# 从linq查询调用函数时出错

C# 从linq查询调用函数时出错,c#,linq,linq-to-sql,generics,C#,Linq,Linq To Sql,Generics,这里是我编写的代码,当我添加了调用第二个函数ValidCodes=GetValidCodesbv.Variable_Id的行时,我得到了错误 Linq to Sql无法解析方法调用GetValidCodes。。进入数据库上下文中的操作-将结果返回内存后,您必须填写该属性,或者直接填写相应的linq to sql语句。linq to sql无法解析方法调用GetValidCodes。。进入数据库上下文中的操作-将结果返回内存后,您必须填写该属性,或者直接填写相应的linq to sql语句。另一张

这里是我编写的代码,当我添加了调用第二个函数ValidCodes=GetValidCodesbv.Variable_Id的行时,我得到了错误


Linq to Sql无法解析方法调用GetValidCodes。。进入数据库上下文中的操作-将结果返回内存后,您必须填写该属性,或者直接填写相应的linq to sql语句。

linq to sql无法解析方法调用GetValidCodes。。进入数据库上下文中的操作-将结果返回内存后,您必须填写该属性,或者直接填写相应的linq to sql语句。

另一张海报回答了原因,但没有回答该怎么办。原因是Linq无法将方法调用转换为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;
}
这应该给你想要的你想要的


编辑:顺便说一句,您可能还想调用BvIndexRows列表中的.ToList或.ToArray。这会导致立即求值,并会阻止多次枚举。如果您不想立即进行评估,您可能需要编辑您的问题,以解释为什么会出现这种情况。我在上面的示例中添加了一个.ToArray,但我也想解释一下原因

另一张海报回答了为什么,但没有回答该做什么。原因是Linq无法将方法调用转换为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;
}
这应该给你想要的你想要的


编辑:顺便说一句,您可能还想调用BvIndexRows列表中的.ToList或.ToArray。这会导致立即求值,并会阻止多次枚举。如果您不想立即进行评估,您可能需要编辑您的问题,以解释为什么会出现这种情况。我在上面的示例中添加了一个.ToArray,但我也想解释一下原因

你犯了什么错误?你能不能以更可读的格式重新发布代码,去掉与问题无关的行?我不知道为什么我的问题得到了-ve票。请你们理解并迅速做出回应。@NetDev我也不知道你们为什么这么做,我今天显然投了很多票,我已经到了极限,但我会努力消除其他人的鲁莽。我想这是因为你后来修改了格式。您提出的问题涉及LINQtoSQL的一个基本部分,这一部分很容易被新手忽略。我认为它是有用的,当然!你犯了什么错误?你能不能以更可读的格式重新发布代码,去掉与问题无关的行?我不知道为什么我的问题得到了-ve票。请你们理解并迅速做出回应。@NetDev我也不知道你们为什么这么做,我今天显然投了很多票,我已经到了极限,但我会努力消除其他人的鲁莽。我想这是因为你后来修改了格式。您提出的问题涉及LINQtoSQL的一个基本部分,这一部分很容易被新手忽略。我认为它是有用的,当然!