Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 检查LINQ声明中的每周第一天_C#_Linq To Entities - Fatal编程技术网

C# 检查LINQ声明中的每周第一天

C# 检查LINQ声明中的每周第一天,c#,linq-to-entities,C#,Linq To Entities,我想检查当前输入日期是否与数据库中的时间戳相同。我通过查看日期的周数来实现这一点 我正在尝试使用: Calendar.GetWeekOfYear(DateTime, ...) 方法,该方法通常有效 但是,当我使用LINQ时,我得到了: An exception of type 'System.NotSupportedException' occurred in System.Data.Entity.dll but was not handled in user code Additional

我想检查当前输入日期是否与数据库中的时间戳相同。我通过查看日期的周数来实现这一点

我正在尝试使用:

Calendar.GetWeekOfYear(DateTime, ...)
方法,该方法通常有效

但是,当我使用LINQ时,我得到了

An exception of type 'System.NotSupportedException' occurred in System.Data.Entity.dll but was not handled in user code

Additional information: LINQ to Entities [...]
我的代码:

 var ordersWeek = orders.Where(c => 
                (EntityFunctions.TruncateTime(c.Timestamp).Value.Year == EntityFunctions.TruncateTime(DateTime.Now).Value.Year) &&
                (EntityFunctions.TruncateTime(c.Timestamp).Value.StartOfWeek(DayOfWeek.Monday) == EntityFunctions.TruncateTime(DateTime.Now).Value.StartOfWeek(DayOfWeek.Monday))
                ).ToList();
在这段代码中,我尝试使用以下扩展方法:

  public static DateTime StartOfWeek(this DateTime dt, DayOfWeek startOfWeek)
    {
        int diff = dt.DayOfWeek - startOfWeek;
        if (diff < 0)
        {
            diff += 7;
        }

        return dt.AddDays(-1 * diff);
    }
public static class MyExtension
{
    public static DateTime StartOfWeek(this DateTime dt, DayOfWeek startOfWeek)
    {
        int diff = dt.DayOfWeek - startOfWeek;
        if (diff < 0)
        {
            diff += 7;
        }

        return dt.AddDays(-1*diff);
    }
}
public static DateTime StartOfWeek(此DateTime dt,DayOfWeek StartOfWeek)
{
int diff=dt.DayOfWeek-startOfWeek;
如果(差异<0)
{
diff+=7;
}
返回dt.AddDays(-1*diff);
}

在LINQ中实现这一点的最佳方法是什么?请记住,您不能使用
.Date
函数。

您的扩展方法
StartOfWeek
仅对您的C代码可见,实体框架无法转换为基础数据源语言(可能是SQL)。同样,如果您尝试使用,它将失败,原因与EF无法翻译它的原因相同

相反,您可以:

  • 计算一周的开始日期和结束日期
  • 使用该范围在LINQ查询中进行查询,如
    c.TimeStamp>=StartDate&&c.TimeStamp
    (EntityFunctions.TruncateTime(c.Timestamp).Value.Year==EntityFunctions.TruncateTime(DateTime.Now).Value.Year)&&
    (EntityFunctions.TruncateTime(c.Timestamp).Value>=startDate&&
    
    EntityFunctions.TruncateTime(c.Timestamp).Value LINQ to Entities与LINQ to Object相比是非常有限的。请发布整个LINQ表达式。如果使用LINQ to Entities,这就是它失败的原因。没有支持的方法将该方法转换为sql。请尝试在sql之外使用该方法,然后在其上加入。如果没有LINQ,您将如何在sql中编写它?请对此进行分析首先找出,然后找出如何将其映射到LINQ。@丹尼斯我添加了代码我想您必须根据C#End的输入日期计算周开始日期和结束日期,然后在LINQ查询中使用该日期范围进行比较,如
    C.TimeStamp>=StartDate&&C.TimeStamp这似乎有问题……扩展名的签名遇到了问题hod应该有“this DateTime dt”。或者至少,我必须这样做才能使它在我的解决方案中发挥作用。否则,回答得很好。@SailingJudo,你是绝对正确的,不知为什么我错过了它,请以后自由编辑自己,谢谢你指出它。
    
    public static class MyExtension
    {
        public static DateTime StartOfWeek(this DateTime dt, DayOfWeek startOfWeek)
        {
            int diff = dt.DayOfWeek - startOfWeek;
            if (diff < 0)
            {
                diff += 7;
            }
    
            return dt.AddDays(-1*diff);
        }
    }
    
    var ordersWeek = orders.Where(c =>
                    (EntityFunctions.TruncateTime(c.Timestamp).Value.Year == EntityFunctions.TruncateTime(DateTime.Now).Value.Year) &&
                    (EntityFunctions.TruncateTime(c.Timestamp).Value >= startDate && 
                    EntityFunctions.TruncateTime(c.Timestamp).Value <= endDate)
                    .ToList();