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
Vb.net LINQ to实体无法识别方法[Type]GetValue[Type]_Vb.net_Linq_Entity Framework_Workflow Foundation 4 - Fatal编程技术网

Vb.net LINQ to实体无法识别方法[Type]GetValue[Type]

Vb.net LINQ to实体无法识别方法[Type]GetValue[Type],vb.net,linq,entity-framework,workflow-foundation-4,Vb.net,Linq,Entity Framework,Workflow Foundation 4,我有这样一个简单的类: Public Class CalculationParameter{ public Long TariffId{get;set;} } (From tariffDetail In db.Context.TariffDetails Where tariffDetial.TariffId = calculationParameter.TariffId).FirstOrDefault() 在工作流活动中,我有如下分配: Public Class Calculatio

我有这样一个简单的类:

Public Class CalculationParameter{
    public Long TariffId{get;set;}
}
(From tariffDetail In db.Context.TariffDetails
Where tariffDetial.TariffId = calculationParameter.TariffId).FirstOrDefault()
在工作流活动中,我有如下分配:

Public Class CalculationParameter{
    public Long TariffId{get;set;}
}
(From tariffDetail In db.Context.TariffDetails
Where tariffDetial.TariffId = calculationParameter.TariffId).FirstOrDefault()
Dto作为输入参数传递给Activity

它引发了以下错误,我想知道如何分配Id。有什么想法吗

LINQ to实体无法识别方法“Int64” GetValue[Int64](System.Activities.LocationReference)方法,以及 方法无法转换为存储表达式

如何将calculationParameter.TariffId分配给tariffDetial.TariffId

更新:
附加的屏幕截图显示了我如何尝试将
calculationParameter.TariffId
分配给
tariffDetail.TariffId
(car.Id=Dto.Id),并且查询结果应该分配给
CurrentTrafficDetail
对象。

这是您的问题。我不知道是否有解决办法

正如你在一篇评论(现在被删除了,很不幸,我必须回答)中所说的,你得到的例外是

LINQ to Entities无法识别方法Int64 GetValue[Int64](System.Activities.LocationReference)方法,并且无法将此方法转换为存储表达式

在Linq查询中,calculationParameter是工作流中定义的变量。该变量实际上是扩展类型System.Activities.LocationReferenceNOT CalculationParameter的实例

通常,当工作流执行时,LocationReference保存查找分配给它的值所需的所有信息。直到最后一刻才检索到该值。在运行时,检索过程(获取执行上下文、获取值、将其转换为预期类型)由工作流管理

然而,当您将Linq引入混音时,我们遇到了您正在经历的问题。您可能知道,也可能不知道,您的表达式会被编译到相同的扩展方法版本中

(From tariffDetail In db.Context.TariffDetails  
Where tariffDetial.TariffId = calculationParameter.TariffId)
.FirstOrDefault()
编译为

db.Context.TariffDetails
          .Where(x => x.TariffId = calculationParameter.TariffId)
          .FirstOrDefault();
执行此命令时,L2E实际上不会执行此代码。它得到解释并转换为针对数据库执行的SQL查询

由于口译员不是无所不知的,因此有一个明确的定义

不幸的是,获取
LocationReference
的当前值不是其中之一

TL:博士,你不能这么做。 至于解决方法,我认为您唯一能做的就是在数据上下文类型上创建一系列扩展方法,或者向CalculationParameter类中添加方法,您可以从表达式编辑器中调用这些方法。您可以在这些方法中创建Linq to Entities查询,因为工作流运行时已经解除了对所有类型的引用,这意味着您不必担心L2E解释器会阻塞LocationReferences


*编辑:一个解决方法(感谢在问题评论中提到这一点的人)

等等,您正在寻找将Dto.Id分配给car.Id或查找具有匹配Id的汽车?也没有看到该部分-您在这里到底想要实现什么?看起来您只是在查询Id为
Dto.Id
@sixlettervariables的汽车:我有另一个对象,它的值应该是
(来自db.Context.Cars-Where-car.Id=Dto.Id中的汽车)。FirstOrDefault()
赋值在哪里?你想用什么来设置?这里解释了问题的原因和解决方法:这是Windows工作流基础特定的问题。“正常”您的LINQ到实体查询将正常工作。