我不断收到异常有关LINQ到实体不支持这样的certaion查询表达式:LINQ到实体查询怪异
MyDataContext db = new MyDataContext()
Brand = db.Brands.First(b => b.BrandId == Int32.Parse(brandIdString))
我不会试图沿串解析到实体店通过,我只是想将该字符串解析为一个整数用于比较。唯一的办法是事先做好这件事情,还是我完全不在这里?
我不断收到异常有关LINQ到实体不支持这样的certaion查询表达式:LINQ到实体查询怪异
MyDataContext db = new MyDataContext()
Brand = db.Brands.First(b => b.BrandId == Int32.Parse(brandIdString))
我不会试图沿串解析到实体店通过,我只是想将该字符串解析为一个整数用于比较。唯一的办法是事先做好这件事情,还是我完全不在这里?
你给的例子最好的选择(至少)是拉操作出来的您的LINQ声明:
Int32 brandId = Int32.Parse(brandIdString)
MyDataContext db = new MyDataContext()
Brand = db.Brands.First(b => b.BrandId == brandId)
说明:
当你使用LINQ,它希望找出如何尽可能多的工作来卸载,因为它可以给您的数据库查询。为了做到这一点,它实际上创建了一个表达式树,其中包含您告诉它在各种lambda表达式中执行的所有操作。然后,当你想运行查询时,它会决定什么SQL语句最适合你要求做的事情。这允许它做一些非常花哨的优化。但是,如果它不知道如何将某些东西转换为SQL语句,那么当您尝试运行查询时,它会生气。
是。这很糟糕。我发现你必须对查询之外的数据进行解析或标准化......然后传递结果。我试图在查询范围内做一些日期格式化时遇到了这个问题。我最终将它从查询中移出到一个字符串变量中,然后传递给已经应用了正确格式的变量。
LAME - 实体框架有很长的路要走!
奇怪的是,我说的与接受的答案相同的东西,但最终被拒绝投票! (:P) – 2009-06-21 21:05:22
,你可以用这个?
MyDataContext db = new MyDataContext();
Brand b = db.Brands.Where(b => b.BrandId == Int32.Parse(brandIdString)).First();
的替代解决方案(不使用Lambda表达式......)是这样的:
MyDataContext db = new MyDataContext();
Brand b = (from Brand b in db.Brands
where b.BrandId == Int32.Parse(brandIdString)
select b).First();
(此外,你错过了;
在每个代码行的末尾,你有没有指定你得到了查询的任何一个变量的名字,但我想那些都是错别字只在这里...)
的数据库中不存在服务字符串解析需求。在涉及它之前执行所需的解析。
顺便说一句,这也使得它很难做投影w/EF – 2009-06-18 21:29:50
而且你不能以其他方式做,比如Where(expression).Select(item => item.ToString()),因为它具有无法在查询中表示ToString。 – 2009-06-18 21:37:11