简单选择FirstOrDefault()后,Ef6 select不返回任何内容

时间:2014-04-03 23:27:49

标签: c# entity-framework

我有一个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查询会产生有效数据。

5 个答案:

答案 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在这种情况下不会引发任何异常,因此很难发现。