Linq To Entities查询奇怪

时间:2009-06-18 21:28:11

标签: .net linq entity-framework linq-to-entities

我不断得到一个关于Linq to Entities的例外,不支持这样的certaion查询表达式:

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

我没有尝试将字符串解析传递给实体存储,我只是想将该字符串解析为整数以进行比较。唯一的工作是事先做到这一点,还是我完全离开这里?

4 个答案:

答案 0 :(得分:6)

最佳选择(至少对于您给出的示例)是将操作从LINQ语句中拉出来:

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

说明:

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

答案 1 :(得分:0)

你能用吗?

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

另一种解决方案(不使用Lambdas ......)是这样的:

MyDataContext db = new MyDataContext();

Brand b = (from Brand b in db.Brands
           where b.BrandId == Int32.Parse(brandIdString)
           select b).First();

(另外,你错过了每个代码行末尾的;,并且你没有为查询中的任何内容指定变量名,但我认为这些是错别字只在这里...)

答案 2 :(得分:0)

数据库不存在以满足字符串解析需求。在涉及之前执行所需的解析。

答案 3 :(得分:-2)

是。这很糟糕。我发现你必须在查询之外进行数据的解析或规范化...然后传入结果。我试图在查询的边界中进行一些日期格式化时遇到了这个问题。我最终将它从查询中移出到一个字符串变量中,然后传入已经应用了正确格式的变量。

LAME - 实体框架还有很长的路要走!