LINQ2SQL + PLINQO: как справиться с такой простой ситуацией?
Я новичок в PLINQO, я довольно новичок в LINQ2SQL и добавляю новый DAL (называемый DAL2) параллельно с нашим старым существующим DAL. Наша идея состоит в том, чтобы начать использовать linq2sql для каждой новой вещи, которую мы добавляем, и постепенно начинать перемещать старое использование DAL в новое DAL2.
Как все мы знаем, DLINQ хорош для простых вещей, но в более сложных сценариях (многие2, отсоединенные объекты и т. Д.) Проблемы возникают мгновенно, и возникает новая необходимость взломать его. PLINQO (вместе с CodeSmish) приходит на помощь и добавляет всю необходимую структуру и инструменты, чтобы сделать его более удобным. Все идет нормально.
Теперь у меня уже есть мой DAL2 (я использую менеджеров). Оно работает". Но у меня есть несколько сомнений.
Я понимаю, что возвращение объекта состоит из следующего запроса:
select name, Count(*) as Total from SomeTable
... это не странный сценарий в большинстве приложений БД. Запрос является простым примером того, что было бы хорошим анонимным типом.
Теперь на секунду представьте такую структуру таблицы.
Tag (1) <—> (n) PatientTag (n) <—> (1) Patient
Идея состоит в том, чтобы узнать, сколько пациентов имеет каждая метка. Простое внутреннее соединение исправит это с помощью SQL, между тегом и тегом пациента. Мне даже не нужен доступ к столу пациента для этого. (Мне просто нужен счет).
В конце концов, все, что я хочу, например:
TAG1, 33
TAG2, 21
ТАГ3, 6
так далее…
Предположим, мне удалось создать запрос linq2sql, который делает это:
var result1 = from pt in dc.PatientTag
join t in dc.Tag on pt.TagId equals t.TagId
select new { TagName = t.TagName };
var result2 = from q in result1
group q by q.TagName into gp
select new { TagName = gp.Key, Total = gp.Count() };
(Я новичок в LINQ, поэтому, если вышеупомянутое не очень хорошо, простите за отсутствие "LINQissm")
Учитывая, что я не могу вернуть этот "новый" анонимный тип (если я не обращаюсь к объекту и отражению, что не является моим намерением), я предполагаю, что должен создать "вспомогательный" класс, который будет содержать две вещи (имя и общее количество). Идея состоит в том, что приведенный выше код должен находиться где-то на уровне данных или на бизнес-уровне, а не в коде пользовательского интерфейса.
Теперь реальный вопрос:
Если вышеприведенное верно, где я должен создать этого "помощника", если я хочу вернуть этот результат (или массив результатов) в пользовательский интерфейс (для правильного отображения и обработки)?
1) В DAL2/Helper/TagNameTotal.cs (поставить пример)
2) В BLayer / Helpers / TagNameTotals.cs?
3) Ничего из вышеперечисленного? (или другое?)
Если вышеупомянутое не верно, что я неправильно думаю?
Разве это не нормально, когда кто-то хочет передать результат запроса в пользовательский интерфейс и изменить его? Скажем, в приведенном выше примере я хотел бы изменить TagName в пользовательском интерфейсе (возможно, это не лучший пример, но он применим).
Извините, но я все еще нахожу, что весь LINQ2SQL немного грубоват, когда он используется вне веб-проекта или простого приложения. Это основные вещи, которые мы делали с ADO.NET (и наборы записей до этого) навсегда.
Сделайте select/join/group/crazySQL, измените, передайте изменения обратно.
PLINQO хорош, потому что он избавляет от хлопот LINQ2SQL в его сырой форме (многие 2 многие, deatached, регенерация контекста, кеш и т. Д.), Но это все еще LINQ, поэтому должны применяться методы DLINQ.
Что мне не хватает?
примечание: не путайте PLinq с PLinqO.
2 ответа
Я ответил на этот пост в сообществе программистов, однако я подумал об этом и наткнулся на этот пост. Вы можете найти этот пост некоторую помощь
По сути, вы создаете мини-класс и используете оператор let для определения подмножества, а затем лениво загружаете его, когда вам это нужно....
Для меня это звучит как бесстыдная заглушка для продукта PLinqO. Я надеюсь, что это не ваше намерение. Я посмотрел на PLinqO и, возможно, получил бы его, если бы вам не пришлось покупать CodeSmith. Нет, спасибо.
Я построил полнофункциональную 3-уровневую платформу с использованием L2S, и я столкнулся с проблемами, связанными с отношениями M:M, обособленными объектами (особенно с обновлениями), обработкой контекста и т. Д., Без использования PLinqO и любого другого стороннего инструмента., Это можно сделать, когда вы поймете, как работает L2S. Я думаю, что наше решение довольно элегантно, а производительность неплохая.
Для тех, кто читает это, если вы хотите потратить деньги на сторонние инструменты, инвестируйте в LinqPad и Linqer. Вы можете приобрести оба этих инструмента менее чем за 75 долларов США; они фантастические И я не связан ни с одним из них.
похотливый