【问题标题】:Get specific table depending on week ASP.NET MVC LINQ根据周 ASP.NET MVC LINQ 获取特定表
【发布时间】:2014-09-25 08:30:57
【问题描述】:

正如标题所说。我正在尝试根据登录用户选择的星期从数据库中获取数据。

我的数据库表 stampings 有一个 UserId、Timestamp 和 StampingType 列!

型号:

public partial class StampingModel
{
    [Key]
    [Column(Order = 0)]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int UserId { get; set; }

    [Key]
    [Column(Order = 1)]
    public DateTime Timestamp { get; set; }

    [Required]
    [StringLength(3)]
    public string StampingType { get; set; }

    public virtual User User { get; set; }
}

}

查看:

@model Aviato.Models.StampingModel <input type="text" id="weekTxtBox"/> <input type="submit" value="Choose" id="weekStampBtn"/>

控制器:

public ActionResult GetWeekStamp(StampingModel model)
    {
        var getWeek = db.Stampings.FirstOrDefault(s => s.Timestamp == model.Timestamp); //This I dont quite know.

        return View();
    }

    public ActionResult Stampings()
    {
        return View();
    }

JavaScript(可选,如果有更简单的方法,请告诉我):

$("#weekStampBtn").click(function() {

    var weekTxtBox = $("#weekTxtBox").val();

    $.ajax({
        url: "User/GetWeekStamp",
        type: "POST",
        datatype: "json",
        data: {
            weekTxtBox: weekTxtBox
        }
    });

});

我的代码应该是什么样子的?尤其是我的 LINQ/Lambda 表达式...

【问题讨论】:

  • 您的问题是什么?您发布的代码是否以某种方式不起作用?如果是,请说明问题所在。
  • 问题标题也有点混乱。你的意思是你有一个带有日期的数据表,并且你想获取在特定周内具有日期的行,例如从 1 月 5 日星期日到 1 月 11 日星期六?如果是这样,用户在 weekTxtBox 中输入了什么来获取这些数据?
  • 用户应该能够根据他们选择的星期日期看到他们的进出印记。我需要知道如何做到这一点,在检查数据库时表达式应该是什么样子?我的冲压表中目前有 4 条测试数据,我当然想显示它...
  • -1 请谷歌 LINQ 并查看一些基本教程或示例。你的问题根本不是问题。问题是你对 LINQ 一无所知。
  • 你能给我一些相关的链接吗?我也不是最好的 Google 员工,因此非常感谢您的帮助。

标签: c# sql asp.net asp.net-mvc linq


【解决方案1】:

实现一种方法,为您提供一年中的一周:

private int GetWeekOfYear(DateTime d)
        {
            var cal = System.Globalization.DateTimeFormatInfo.CurrentInfo.Calendar;
            return cal.GetWeekOfYear(new DateTime(d.Year, d.Month, 1), System.Globalization.CalendarWeekRule.FirstDay, System.DayOfWeek.Sunday);
        }

然后将代码更改为:

var getWeek = db.Stampings.FirstOrDefault(s => GetWeekOfYear(s.Timestamp) == GetWeekOfYear(model.Timestamp)); 

【讨论】:

  • 异常详细信息:System.NotSupportedException:LINQ to Entities 无法识别方法“Int32 GetWeekOfYear(System.DateTime)”方法,并且此方法无法转换为存储表达式。红线:“var getWeek = db.Stampings.FirstOrDefault(s => GetWeekOfYear(s.Timestamp) == GetWeekOfYear(model.Timestamp));”
  • 在方法中添加static关键字:private static int GetWeekOfYear(DateTime d)
  • @Qvadriologic 我测试了我的解决方案,它适用于静态关键字
猜你喜欢
  • 1970-01-01
  • 2013-03-02
  • 1970-01-01
  • 2016-11-05
  • 2017-09-08
  • 2018-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多