2014-01-10 3 views
5

Я хочу, чтобы преобразовать строковое значение времени датызапросов LINQ для преобразования строки в дату

Класс

public class demoDate 
{ 
    public DateTime DueDate; 
    public int OrderReportID; 

    public DateTime _DueDate 
    { 
     get { return DueDate; } 
     set { DueDate = value; } 
    } 

    public int _OrderReportID 
    { 
     get { return OrderReportID; } 
     set { OrderReportID = value;} 
    } 
} 

Запрос

var DateQuery = (from o in db.Order_Reports 
       select new demoDate { 
        DueDate = System.DateTime.Parse(o.ReportDueDateTime), 
        OrderReportID = o.OrderReportID 
       }).ToList(); 

Это кодирование показывает следующие ошибки

LINQ to Entities не распознает метод 'System.DateTime Parse (System.String)', и этот метод не может быть переведен в выражение хранилища.

+0

использование попробовать 'Convert.ToDateTime' вместо – Grundy

+1

Вам нужно материализовать' db.Order_Reports' (например, '.ToList()'), прежде чем делать прогноз, поскольку EF не может разбора преобразовать в выражение sql. – StuartLC

+0

@Grundy Это тоже показывает ошибку. LINQ to Entities не распознает метод 'System.DateTime ToDateTime (System.String)', и этот метод не может быть переведен в выражение хранилища. – Golda

ответ

5

Необходимо сначала выполнить запрос (т. Е. Загрузить данные) в приложение и затем проанализировать его. Entity Framework не знает, как выполнить методы .Net (как DateTime.Parse), он знает, как перевести их в SQL

var DateQuery = db.Order_Reports.ToList().Select(o => new demoDate 
{ 
    DueDate=DateTime.Parse(o.ReportDueDateTime), 
    OrderReportID= o.OrderReportID 
}); 
+1

Не будет ли это загружать всю таблицу каждый раз, когда она будет вызвана? Это может быть много данных, если таблица большая. –

+0

@RuneAntonsen очень верно. Но неизбежно, если вы используете обычные методы .Net, которые не могут быть переведены на запросы. Вероятно, было бы лучше всего переделать это полностью. – i3arnon

+0

или, альтернативно, вы можете проецировать свои столбцы, а затем вызывать ToList, а затем применять другой выбор для создания экземпляра – ciko

9

Если вам нужно преобразовать его с SQL вы можете попробовать использовать SqlFunctions.DateAdd и просто добавить нулевой интервал.

var DateQuery = db.Order_Reports.Select(o => new demoDate { 
    DueDate = SqlFunctions.DateAdd("day", 0, o.ReportDueDateTime), 
    OrderReportID = o.OrderReportID 
}); 
0
DateTime myDateTime = Convert.ToDateTime(DateTimePicker.Text); 

var kayitVarmi = (from myfTable in db.tbl_myfTable 
           . 
           . 
           . 
           .      
           where 
           tbl_donemAyYil.donemAyYilKu == myDateTime 
Смежные вопросы