Abhilask kumar Ответов: 2

Вступайте в рамках предприятия, но принести ошибку.


У меня есть две модели: Первая-это расходы, а вторая-Itemmodels. Магазин Все продукт в Itemmodels с ID,имя и в счет хранить только идентификатор элемента. поэтому мне нужно получить запись из обеих таблиц через код соединения ниже. Но это ошибка выборки:
LINQ to Entities does not recognize the method 'System.String ToString(System.String)' method, and this method cannot be translated into a store expression

var data = db.expense
                    .Join(db.Itemmodels, q => q.ITEM, o => o.id, (q, ITEM) => new { q, ITEM })
                    .Where(o => o.q.EntryDate.ToString() == DateTime.Now.ToString("dd/MM/yyyy")).Where(o => o.q.Manager.ToString() == managerName).Where(o => o.q.THROUGH.ToString() != "CashTransfer")
                    .ToList();

Maciej Los

Дата есть дата и ничего больше! Вы не должны преобразовывать его в формированную строку!

Abhilask kumar

Но в модели и базе данных EntryDate - это строковый тип.

2 Ответов

Рейтинг:
5

Karthik_Mahalingam

попробуй вот так

string currentDate = DateTime.Now.ToString("dd/MM/yyyy");
      var data = db.expense.Join(db.Itemmodels, exp => exp.ITEMID, im => im.id, (exp, im) => new { exp = exp, im = im })
                     .Where(o => o.exp.EntryDate == currentDate &&  o.exp.Manager == managerName &&  o.exp.THROUGH != "CashTransfer")
                     .ToList();


Maciej Los

Что ж... Он соответствует требованиям ОП, хотя Where пункт, повторенный 3 раза, выглядит некрасиво. ;(
Улучшите его, и вы получите от меня 5 ;) До сих пор-4!

Karthik_Mahalingam

ха-ха, хороший улов.
сделано сэр :)
Спасибо.

Maciej Los

5ед!

Karthik_Mahalingam

Спасибо Мацей Лос

Abhilask kumar

Сэр, очень-очень Вам благодарен.
и Сэр, я новичок в mvc и entity framework.

Karthik_Mahalingam

крутой.

Abhilask kumar

Сэр еще одна помощь, когда этот результат переносится на просмотр, то возникает эта ошибка "элемент модели, переданный в словарь, имеет тип' System.Коллекции.Generic. List`1[<> f__AnonymousType3`2[Расход.Модели.tbl_expense,счет.Модели.Itemmodel]]', но для этого словаря требуется элемент модели типа ' System.Коллекции.Общий.IEnumerable`1[Расход.Модели.tbl_expense]'.
"

Karthik_Mahalingam

преобразуйте данные в тип tbl_expense

Рейтинг:
1

Maciej Los

Пожалуйста, прочтите мой комментарий к этому вопросу.

Это тоже должно сработать:

var data = db.expense
                    .Join(db.Itemmodels, q => q.ITEM, o => o.id, (q, ITEM) => new { q, ITEM })
                    .Where(o => o.q.EntryDate == DateTime.Today && o.q.Manager == managerName && o.q.THROUGH != "CashTransfer")
                    .ToList();


Karthik_Mahalingam

Привет Мацей
EntryDate = = DateTime.Сегодня
вышеприведенное условие никогда не будет соответствовать вообще. так как он будет проверять Отметка времени также.

Maciej Los

Это зависит от типа данных EntryDate поле. Если это дата, а не тип данных DateTime, то запрос также должен работать. Если нет, то вы правы.
Спасибо за комментарий, Картик.

Karthik_Mahalingam

даже если это тип даты (в БД), он будет иметь значение "06/21/2016 00:00:00" в EntryDate( свойство c#), но DateTime.Теперь у вас будет метка времени типа " 21.06.2016 15:53:21"
так что он никогда не будет соответствовать вообще.
и прости, если я ошибаюсь.

Maciej Los

Как вы можете видеть, Я заменил DateTime.Теперь с датой и временем.Сегодня ;)

Karthik_Mahalingam

теперь все должно быть в порядке с вопросом даты.
5 за это.

Maciej Los

Спасибо, Картик.

Abhilask kumar

Но в модели и базе данных EntryDate - это строковый тип.

Maciej Los

Что ж... Звучит как очень плохой дизайн!

Abhilask kumar

когда я использую эту БД.Где(Р =&ГТ; п.EntryDate == Дата И Время.Сейчас.Метод toString("ДД/ММ/гггг")).Где (o = & gt; o.Manager == managerName).Где (o = & gt; o.THROUGH ! = "CashTransfer").Выберите (m = & gt; m.ITEM).Список()
тогда работайте нормально, но когда я использую join, то эта ошибка произойдет.

Karthik_Mahalingam

Измените тип столбца EntryDate на "Date"/" DateTime " в схеме таблицы БД.

Maciej Los

Очень хороший совет!

Abhilask kumar

спасибо за повтор,
Что я могу сделать?
проблема не в том, в каком состоянии.

Karthik_Mahalingam

разместите код класса для expense и Itemmodels

Abhilask kumar

публичный класс Itemmodel
{
[Ключ]
public int id { get; set; }
[Требуемый]
[MaxLength(50, ErrorMessage = "не может быть длиннее 50 символов.")]
[Display(Name= " Имя Элемента")]
public string ITEM { get; set; }
[Требуемый]
[MaxLength(5, ErrorMessage = "не может быть длиннее 5 символов.")]
[Display (Name= " Item Unit")]
подразделение Государственной строку { получить; набор; }
[Требуемый]
public int STATUS { get; set; }
//общедоступный виртуальный интерфейс ICollection&ЛТ;tbl_expense&ГТ; tbl_expenses { получить; набор; }
}

расходы на общественный класс
{
[Ключ]
public int id { get; set; }
[Дисплей(Имя= " Местоположение")]
public string Manager { get; set; }
[Требуемый]
[Display(Name = " Имя Элемента")]
общественный тип int идентификатор элемента { получить; набор; }
[Требуемый]
[Дисплей(Имя = " Дата")]
[Тип Данных(DataType. Date)]
public DateTime DATE { get; set; }
[Требуемый]
[Display(Name= " Through")]
[MaxLength(24, ErrorMessage = "не может быть длиннее 25 символов.")]
публичная строка через { get; set; }
[Требуемый]
[Дисплей(Имя= " Количество")]
свободном обращении кол-во { получить; набор; }
[Требуемый]
[Display (Name = " Сумма")]
публичное размещение АМТ { получить; набор; }
[Требуемый]
[Display(Name= " Примечания")]
публичная строка REM { get; set; }
public string LOC { get; set; }
public string EntryDate { get; set; }
}