Гость
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Не пойму как интепретировать сообщение об ошибке в запросе / 17 сообщений из 17, страница 1 из 1
02.04.2015, 12:11
    #38924822
ValGer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не пойму как интепретировать сообщение об ошибке в запросе
Использую LINQ to SQL Составляю простейший запрос, а он при прогоне выдаёт что-то непотребное (см. рисунок). В чём причина?
Вроде раньше составлял нечто аналогичное и проблем не было. Может что с базой? (Это Борей, аналог Northwind)
...
Рейтинг: 0 / 0
02.04.2015, 12:18
    #38924833
Axeleron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не пойму как интепретировать сообщение об ошибке в запросе
Код: c#
1.
var q = (from x in db.GetTable<Клиенты>() select new Клиенты {...}).ToList();
...
Рейтинг: 0 / 0
02.04.2015, 12:36
    #38924861
bazile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не пойму как интепретировать сообщение об ошибке в запросе
ValGer, явное конструирование entity объекта может позже создать проблемы если их приаттачить к контексту и сохранить изменения. Чтобы люди не наступали на такие грабли это запрещено. Используй анононимый объект или свой тип.
Код: c#
1.
var clientsList = db.GetTable<Клиенты>().Select(c => new { c.КодКлиента, c.Название, c.Город, c.Адрес).ToList();


Или создай отдельный mapping для таблицы Клиенты только с этими четырьмя колонками.
...
Рейтинг: 0 / 0
02.04.2015, 12:44
    #38924875
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не пойму как интепретировать сообщение об ошибке в запросе
Axeleron
Код: c#
1.
var q = (from x in db.GetTable<Клиенты>() select new Клиенты {...}).ToList();



Правильное решение проблемы озвучено bazile
...
Рейтинг: 0 / 0
02.04.2015, 13:15
    #38924931
Axeleron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не пойму как интепретировать сообщение об ошибке в запросе
hVosttПравильное решение проблемы озвучено bazile
Согласен
...
Рейтинг: 0 / 0
02.04.2015, 14:06
    #38925069
Axeleron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не пойму как интепретировать сообщение об ошибке в запросе
Хотя лучшая практика - сразу мапить объект, используя DTO патерн.
...
Рейтинг: 0 / 0
02.04.2015, 14:09
    #38925074
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не пойму как интепретировать сообщение об ошибке в запросе
AxeleronХотя лучшая практика - сразу мапить объект, используя DTO патерн.

Угу, использовать проекции и AutoMaper Project().To<T>()
...
Рейтинг: 0 / 0
02.04.2015, 14:22
    #38925085
Axeleron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не пойму как интепретировать сообщение об ошибке в запросе
hVosttAxeleronХотя лучшая практика - сразу мапить объект, используя DTO патерн.

Угу, использовать проекции и AutoMaper Project().To<T>()
Это уже частности. Можно аутомапер, а можно и рукомапер.
...
Рейтинг: 0 / 0
02.04.2015, 14:50
    #38925129
ValGer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не пойму как интепретировать сообщение об ошибке в запросе
Axeleron
Код: c#
1.
var q = (from x in db.GetTable<Клиенты>() select new Клиенты {...}).ToList();


Это не "катит".

Я о другом: как понять выдаваемое сообщение? Всё вроде бы правильно, а выдаётся такая "хрень".
Я ещё почему привязываюсь к этому, а не к цепочному варианту запроса. Дело в том, что в перспективе необходимо соединять несколько таблиц и я знаю как это сделать с их неограниченным количеством. В цепочечном варианте (<--->.<--->.<----> и так далее) это вроде бы то же можно сделать, но как - абсолютно непонятно. Примеров не встречалось.
...
Рейтинг: 0 / 0
02.04.2015, 15:09
    #38925156
Axeleron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не пойму как интепретировать сообщение об ошибке в запросе
ValGer,
Использовать Join'ы
...
Рейтинг: 0 / 0
02.04.2015, 15:53
    #38925224
ValGer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не пойму как интепретировать сообщение об ошибке в запросе
Axeleron,

Ну понял в чём дело и "где собака зарыта". Просто нельзя напрямую работать с типами таблиц определённых в dbml-файле. Нужно этот тип просто повторить в отдельном классе. Об этом и говорит (хотя и извилисто) сообщение - сразу понять его трудно. Привожу код

Класс - дубль таблицы "Клиенты"
public class Client
{
public string КодКлиента { get; set; }
public string Название { get; set; }
//.................................
public string Факс { get; set; }
}

Код запроса
static void Main(string[] args)
{
BoreiDBDataContext db = new BoreiDBDataContext(); // База Борей (LINQ to SQL)
List< Client > clientsList = new List< Client >();
var q = from п in db.GetTable<Клиенты>() // Отсюда получаем (БД)
select new Client
{
// Сюда кладём ( Client )
КодКлиента = п.КодКлиента,
Название = п.Название,
//ОбращатьсяК = п.ОбращатьсяК,
//Должность = п.Должность,
//Адрес = п.Адрес,
//Город = п.Город,
//Область = п.Область,
//Индекс = п.Индекс,
//Страна = п.Страна,
//Телефон = п.Телефон,
Факс=п.Факс
};

foreach (var k in q)
{
clientsList.Add(( Client )k);
};

Console.ReadKey();
}
}

Теперь всё работает!
...
Рейтинг: 0 / 0
02.04.2015, 16:05
    #38925249
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не пойму как интепретировать сообщение об ошибке в запросе
...
Рейтинг: 0 / 0
02.04.2015, 16:18
    #38925272
ValGer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не пойму как интепретировать сообщение об ошибке в запросе
Shocker.Pro Как мне оформить свое сообщение?

Спасибо большое, а то действительно читается не очень ... Запишу эту памятку себе.
...
Рейтинг: 0 / 0
18.04.2015, 12:17
    #38939791
ValGer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не пойму как интепретировать сообщение об ошибке в запросе
ValGerИспользую LINQ to SQL Составляю простейший запрос, а он при прогоне выдаёт что-то непотребное (см. рисунок). В чём причина?
Вроде раньше составлял нечто аналогичное и проблем не было. Может что с базой? (Это Борей, аналог Northwind)

Докопался я до причины - "ларчик, как всегда открывался просто". Просто GetTable<Тип>() нужно преобразовать к типу IEnumerable<Тип> и тогда всё проходит без ошибок выполнения.

Код: c#
1.
2.
3.
4.
5.
var qClients = from xClient in db.GetTable<Клиенты>().[color=red]AsEnumerable<Клиенты>()[/color]                           select new Клиенты
              {
                       КодКлиента=xClient.КодКлиента,
                       Название=xClient.Название
              };
...
Рейтинг: 0 / 0
18.04.2015, 15:26
    #38939821
bazile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не пойму как интепретировать сообщение об ошибке в запросе
ValGer, не надо так делать ( 17463754 ). Используй анонимный тип или создай свой класс с нужными полями.
...
Рейтинг: 0 / 0
01.05.2015, 09:58
    #38950197
ValGer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не пойму как интепретировать сообщение об ошибке в запросе
bazileValGer, не надо так делать ( 17463754 ). Используй анонимный тип или создай свой класс с нужными полями.

В общих словах о причинах, пожалуйста?
...
Рейтинг: 0 / 0
01.05.2015, 11:17
    #38950220
bazile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не пойму как интепретировать сообщение об ошибке в запросе
ValGer, в общих словах я тебе уже ответил .
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Не пойму как интепретировать сообщение об ошибке в запросе / 17 сообщений из 17, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]