Как получить данные за период времени (-10 месяцев) в Entity Framework? - PullRequest
0 голосов
/ 21 декабря 2018

Я пытаюсь подсчитать количество транзакций за последние 10 месяцев.Как мне получить это с Entity Framework?

Я пытался сделать этот код:

public ActionResult Test()
{
    var Model = db.Transactions
                  .Where(u => u.TransactionsDate > DateTime.Now.AddMonths(-10))
                  .Count();

    Response.Write(Model);
    return null;
}

с этим кодом у меня есть эта страница ошибки:

LINQобъектам не распознается метод метода System.DateTime AddMonths (Int32), и этот метод нельзя преобразовать в выражение хранилища.

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

Вы можете определить свой «десять месяцев назад» следующим образом:

DateTime tenMonthsAgo = DateTime.Today.AddMonths(-10);

таким образом:

using System;
using System.Collections.Generic;
using System.Linq;

public class Program
{
    public static List<DateTime> getDates()
    {
        DateTime d1 = new DateTime(2018,1,1);
        DateTime d2 = new DateTime(2018,5,1);
        DateTime d3 = new DateTime(2018,12,1);

        List<DateTime> db = new List<DateTime>();

        db.Add(d1);
        db.Add(d2);
        db.Add(d3);

        return db;      
    }

    public static void Main()
    {
        var model = getDates();     
        DateTime tenMonthsAgo = DateTime.Today.AddMonths(-10);      

        var query = model.Where(dates => dates.Month > tenMonthsAgo.Month);

        foreach (var q in query)
        {
            Console.WriteLine("res: " + q); 
             //res:5/1/2018 12:00:00 AM
             //res:12/1/2018 12:00:00 AM
        }
    }
}
0 голосов
/ 21 декабря 2018

LINQ не может перевести этот вызов метода в выражение SQL.Но вам это не нужно, вы можете просто сохранить значение из вызова этого метода и передать значение в LINQ:

var someValue = DateTime.Now.AddMonths(-10);
var model = db.Transactions.Where(u => u.TransactionsDate > someValue).Count();

Примечание ... Это очень неправильно :

Response.Write(model);
return null;

Ваш метод возвращает ActionResult, поэтому верните ActionResult.Каким должен быть этот результат?Например, если вы вызываете это из AJAX и ожидаете данных JSON, верните это как ваш результат:

return Json(model);

Или, возможно, это действие должно вернуть представление для отображения страницыв браузере?:

return View(model);

Вы почти никогда пишете непосредственно в ответ, и метод, который всегда возвращает null, является излишним.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...