Сделайте выбор между двумя датами, захваченными JQuery Datepicker с Linq Entities

Я использую Database First, EF 6, Visual Studio 2013 Pro.

Это код на контроллере

    public ActionResult Index(string searchString, string datepicker, string datepicker2)
    {
        var transactions = db.transactions.Include(t => t.Client).Include(t => t.DocumentType).Include(t => t.MovementType1);
        if (!String.IsNullOrEmpty(searchString))
        {
            transactions = transactions.Where(s => s.Client.Name.Contains(searchString) && 
                                              s.Date >= Convert.ToDateTime(datepicker) && s.Date < Convert.ToDateTime(datepicker2));     
        }
        return View(transaccions.ToList());
    }

Он хорошо сделал выбор при поиске по имени клиента.

Это код представления

@using (Html.BeginForm())
{
 <p>
    Search Transactions by Name: @Html.TextBox("SearchString") 
    First Date:  
                  <input type="text" id="datepicker"/>
    Second Date: 
                   <input type="text" id="datepicker2"/>

    <input type="submit" value="Search"/>
</p> 
}

Как видите, я фиксирую даты через выбор, сделанный пользователем в средстве выбора даты.

Я хочу сделать этот запрос: SELECT * FROM TRANSACTION WHERE Client.Name LIKE (searchString) AND DATE BETWEEN (datepicker) AND (datepicker2).

Я хочу сделать поиск по имени клиента и диапазону дат.

Проблема в том, что Linq не распознает метод преобразования.

Я искал способ сделать это, и ни один из них не совместим с моим кодом.

Какие-либо предложения?


person GuaGua0308    schedule 24.02.2015    source источник


Ответы (1)


Вам нужно выполнить преобразование вне запроса Linq:

public ActionResult Index(string searchString, string datepicker, string datepicker2)
{
    var transactions = db.transactions.Include(t => t.Client).Include(t => t.DocumentType).Include(t => t.MovementType1);
    if (!String.IsNullOrEmpty(searchString))
    {
        //Get your dates here...
        var fromDate = Convert.ToDateTime(datepicker);
        var toDate = Convert.ToDateTime(datepicker2);

        transactions = transactions.Where(s => s.Client.Name.Contains(searchString) && 
                                          s.Date >= fromDate && s.Date < toDate);     
    }
    return View(transaccions.ToList());
}
person DavidG    schedule 24.02.2015
comment
Обычно я рекомендую использовать фиксированный формат для dateTimePicker и использовать fromDate = DateTime.ParseExact(datepicker, "yyyyMMdd", null); - person tschmit007; 24.02.2015
comment
Лучше бы объяснили, что он получил эту ошибку, потому что Entity Framework не знает, как выполнить метод Convert.ToDateTime в sql. - person Farhad Jabiyev; 24.02.2015
comment
Работает!! Спасибо, ДэвидГ. - person GuaGua0308; 24.02.2015