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
.net Linq到实体查询异常_.net_Linq_Entity Framework_Linq To Entities - Fatal编程技术网

.net Linq到实体查询异常

.net Linq到实体查询异常,.net,linq,entity-framework,linq-to-entities,.net,Linq,Entity Framework,Linq To Entities,我一直收到一个关于Linq to实体的异常,该实体不支持某些查询表达式,如下所示: MyDataContext db = new MyDataContext() Brand = db.Brands.First(b => b.BrandId == Int32.Parse(brandIdString)) 我没有试图将字符串解析传递给实体存储,我只是想将该字符串解析为一个整数进行比较。这是唯一可以提前完成的工作,还是我已经完全离开这里了?是的。这太糟糕了。我发现您必须在查询之外对数据进行解析或

我一直收到一个关于Linq to实体的异常,该实体不支持某些查询表达式,如下所示:

MyDataContext db = new MyDataContext()
Brand = db.Brands.First(b => b.BrandId == Int32.Parse(brandIdString))

我没有试图将字符串解析传递给实体存储,我只是想将该字符串解析为一个整数进行比较。这是唯一可以提前完成的工作,还是我已经完全离开这里了?

是的。这太糟糕了。我发现您必须在查询之外对数据进行解析或规范化…然后传入结果。我在尝试对查询的边界进行一些日期格式化时遇到了这种情况。最后,我将它从查询中移到一个字符串变量中,然后传入已应用正确格式的变量

LAME-Entity框架还有很长的路要走

你能用这个吗

MyDataContext db = new MyDataContext();
Brand b = db.Brands.Where(b => b.BrandId == Int32.Parse(brandIdString)).First();
另一种解决方案(不使用Lambdas…)是:

(另外,您缺少每个代码行末尾的
,并且您还没有为从查询中得到的任何内容指定变量名,但我想这些只是这里的输入错误…

最好的选择(至少对于您给出的示例而言)是从LINQ语句中提取操作:

Int32 brandId = Int32.Parse(brandIdString)
MyDataContext db = new MyDataContext()
Brand = db.Brands.First(b => b.BrandId == brandId )
说明:


当您使用LINQ时,它希望找到方法将尽可能多的工作卸载到数据库查询中。为了做到这一点,它实际上创建了一个表达式树,其中包含了您在各种lambda表达式中告诉它要执行的所有操作。然后,当您想要运行查询时,它会决定哪条SQL语句最适合执行您要求它执行的操作。这使得它可以进行一些非常奇特的优化。但是,如果它不知道如何将某些内容转换为SQL语句,那么当您尝试运行查询时,它会对您感到恼火

数据库不存在,无法满足字符串解析需要。在涉及它之前执行所需的解析。

Btw,这也使得使用E/E进行投影非常困难,而且您也不能使用其他方法,比如Where(表达式)。选择(item=>item.ToString()),因为它无法在查询中表示ToString。可能仍然不起作用。我猜当框架试图分解where时,它没有办法在查询中表达这一点。它必须作为一个整体进行评估,因为它只是一组链接的表达式。如果这是林肯的藏品,你会没事的。奇怪的是,我说了与公认答案相同的话,但最终还是被投了赞成票!(:P)是的,当人们不告诉你为什么就投了反对票时,这很烦人。
Int32 brandId = Int32.Parse(brandIdString)
MyDataContext db = new MyDataContext()
Brand = db.Brands.First(b => b.BrandId == brandId )