.net Linq到实体查询异常
我一直收到一个关于Linq to实体的异常,该实体不支持某些查询表达式,如下所示:.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)) 我没有试图将字符串解析传递给实体存储,我只是想将该字符串解析为一个整数进行比较。这是唯一可以提前完成的工作,还是我已经完全离开这里了?是的。这太糟糕了。我发现您必须在查询之外对数据进行解析或
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 )