我有一个EF6上下文,数据访问似乎都有效。有一个返回无法计算表达式。这是FirstOrDefault。如果我在没有FIrstOrDefault的情况下进行查询,那么IEnumerable包含我正在寻找的1项。我哪里错了?我还有很多其他FirstOrDefault工作正常。
var a = "";
var products = from p in _db.Products
where p.SKU == isbn
select p;
foreach (var productx in products)
{
a = productx.SKU; <- productx contains the valid product
}
var product = (from p in _db.Products
where p.SKU == isbn
select p).FirstOrDefault(); <-- can't evaluate
即使刷新上下文,也会发生同样的情况......
这两个都返回LinqPad中的正确行...
Products.FirstOrDefault(p=>p.SKU == "9781250033697")
(from p in Products where p.SKU == "9781250033697" select p).FirstOrDefault()
这些在我的应用中产生空值(isbn =“9781250033697”)
var product = _db.Products.FirstOrDefault(p=>p.SKU == isbn);
var products = from p in _db.Products
where p.SKU == "9781250033697"
select p;
针对同一db的其他Ling查询会产生有效数据。
答案 0 :(得分:0)
var product = db.Products.FirstOrDefault(p=>p.SKU == isbn);
答案 1 :(得分:0)
使用LINQPad
这有效
/* all records */
var query = (from r in Regions select r);
query.Dump();
/* first record */
var query2 = (from r in Regions select r).FirstOrDefault();
query2.Dump();
/* "00006" record */
var query3 = (from r in Regions where r.MaestroId == "00006" select r).FirstOrDefault();
query3.Dump();
我建议获取LINQPad并测试应用程序之外的预期结果,看看查询是否真的没有返回或者你提到的无法评估。硬编码你想要获得的ISBN的值,我发现,当LINQ查询不能正常工作时,我传递给它的值是罪魁祸首...除非EF6完全改变...
答案 2 :(得分:0)
查看使用实体框架6的日志功能生成的SQL查询
看看这篇文章知道如何; Logging and Intercepting Database Operations
应该那么容易;
using (var context = new BlogContext())
{
context.Database.Log = Console.Write;
// Your code here...
}
答案 3 :(得分:0)
我要关闭这个。
感谢您的回复。
我认为我的项目中某处存在损坏的源文件。当我在控制台项目中运行查询时,它运行正常。
答案 4 :(得分:0)
最近我遇到了类似的问题,经过3个多小时的徒劳调试和检查分析器中生成的SQL之后,我意识到我的连接字符串中的数据库指定为“ 初始目录”不正确
显然,EF仍然可以组装正确的查询,但是当实际数据库与“初始目录”不匹配时,它无法将结果映射到模型(我认为)。
偶然错误,但由于EF在这种情况下不会引发任何异常,因此很难发现。