0

私は次のクラスを持っています:

public class Top10Date
    {
        [Key]
        public int DateId { get; set; }
        public DateTime Date { get; set; }        
    }

これは、データベースのTop10Dateテーブルに関連付けられています。比較を行い、コントローラークラスのlatestDateに値を割り当てようとしています。

public ActionResult Index(string date, DateTime? latestDate)
    {
        var topDate = db.Top10Dates;

        if (!latestDate.HasValue)
            latestDate = (DateTime?)(topDate.OrderByDescending(d => d.Date).FirstOrDefault());


       if (date.Value == "PreviousDate")
        {
            latestDate = (DateTime?)(topDate.Where(d => d.Date < latestDate.Date).OrderByDescending(d => d.Date).FirstOrDefault());                
        }

        if (date.Value == "NextDate")
        {
            latestDate = (DateTime?)(topDate.Where(d => d.Date > latestDate.Date).OrderBy(d => d.Date).FirstOrDefault());
        }

        .... 

        ViewBag.latestDate = latestDate

        return View();
    }

しかし、それは私にあらゆる種類のエラーを与えています。私も他のことを試しましたが、どれも機能していません:

latestDate = topDate.OrderByDescending(d => d.Date).FirstOrDefault();
latestDate.Value = topDate.OrderByDescending(d => d.Date).FirstOrDefault();

latestDate = topDate.Where(d => d.Date > latestDate.Value.Date).OrderBy(d => d.Date).FirstOrDefault();

また、データベースからDateIdを取得するにはどうすればよいですか?私はこれを試しましたが、現在は機能しています。

var dateId = (DateTime?)top10Date.Where(d => d.Date == latestDate.Value.Date).Select(x => x.DateId).FirstOrDefault();
4

2 に答える 2

1

試す

if (!latestDate.HasValue)
    latestDate = (DateTime?)(topDate.OrderByDescending(d => d.Date).Select( x => x.Date).FirstOrDefault());    

if (date == "PreviousDate")
{
    latestDate = (DateTime?)(topDate.Where(d => d.Date < latestDate.Date).OrderByDescending(d => d.Date).Select(x => x.Date).FirstOrDefault());
}

if (date == "NextDate")
{
    latestDate = (DateTime?)(topDate.Where(d => d.Date > latestDate.Date).OrderBy(d => d.Date).Select(x => x.Date).FirstOrDefault());
}

に対するクエリは、に自動的に変換できないtopDateのインスタンスを返しています。linq メソッドを使用して、クエリで別のものを返すことができます。この場合、プロパティはTop10DateDateTime?Select()DateTop10Date

于 2012-08-28T04:42:21.293 に答える
0

他の誰かが同様の問題を抱えていた場合の作業コードは次のとおりです。これを理解するのに丸一日かかりました。そして、正しい道を示してくれたStanKに感謝してもしきれません:

if (!latestDate.HasValue)
            {
                latestDate = (DateTime?)(topDate.OrderByDescending(d => d.Date).Select(x => x.Date).FirstOrDefault());
            }


           if ( date == "PreviousDate")
            {
                latestDate = (DateTime?)(topDate.Where(d => d.Date < latestDate).OrderByDescending(d => d.Date).Select(x => x.Date).FirstOrDefault());                
            }

            if (date == "NextDate")
            {
                latestDate = (DateTime?)(topDate.Where(d => d.Date > latestDate).OrderBy(d => d.Date).Select(x => x.Date).FirstOrDefault());
            }

また、latestDate の DateId を取得する方法は次のとおりです。

    int dateId = topDate.Where(d => d.Date == latestDate).Select(x => x.DateId).FirstOrDefault();
于 2012-08-28T05:26:22.667 に答える