【问题标题】:Same "Where" each time returns different result相同的“Where”每次返回不同的结果
【发布时间】:2013-09-19 11:59:27
【问题描述】:

我有一个 .NET 服务(使用 Entity Framework 6.0.0-rc-1)

public class MyController : ApiController
{
    protected DbConnection _connection = new DbConnection();

    public HttpResponseMessage MyProcedure1()
    {
        ...
        var dayPlans = _connection.DayPlans
                          .Where(dp => dp.period >= start && dp.period < end);
        if (dayPlans.Count() > 0)
        {
            //success
        }
        else
        {
            //fail
        }
        ...
    }

    public HttpResponseMessage MyProcedure2()
    {
        ...
        var dayPlans = _connection.DayPlans
                          .Where(dp => dp.period >= start && dp.period < end);
        if (dayPlans.Count() > 0)
        {
            //success
        }
        else
        {
            //fail
        }
        ...
    }
}

客户端同时使用这些程序。事情是有时 dayPlans.Count() 等于零,而它不应该。我已经仔细检查了过滤参数和数据库内容,必须从 db 中选择的记录很少,但它们不是。

另一个重要的时刻是当一种方法中的 LINQ 请求失败时,它总是在另一种方法中失败。但是当这些过程被一个接一个地调用时,它们可能会在所有可能的变体中失败——第一个请求失败,第二个成功;第一次失败第二次失败;等等

可能是什么问题?

【问题讨论】:

  • 你已经展示了两种做同样事情的方法——为什么?另请注意,使用Any() 比使用Count() &gt; 0 更清晰,并且在某些情况下效率更高。
  • 什么是DbConnection?是数据上下文吗?
  • startend 设置在哪里?
  • 1) 他们不做同样的事情,只是初始数据很常见。 2) DbConnectionDbContext 3) startend 在上面设置。 var now = DateTime.Now; var start = now.Subtract(new TimeSpan(now.Hour, now.Minute, now.Second)); var end = now.AddDays(1).Subtract(new TimeSpan(now.Hour, now.Minute, now.Second));

标签: c# linq entity-framework linq-to-entities entity-framework-6


【解决方案1】:

那是我的错误,日期边界计算不正确

【讨论】:

    猜你喜欢
    • 2020-01-28
    • 2012-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多