Я новичок в 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
TAG3, 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) Ничего из вышеперечисленного? (или либо?)
Если вышеприведенное не true , о чем я неправильно думаю?
Разве это не нормально, когда кто-то хочет передать результат запроса в пользовательский интерфейс и изменить его? Скажем, в приведенном выше примере я хотел бы изменить TagName в пользовательском интерфейсе (возможно, это не лучший пример, но он применим).
Извините, но я все еще нахожу, что весь LINQ2SQL немного грубоват, когда он используется вне веб-проекта или простого приложения. Это основные вещи, которые мы делали с ADO.NET (и наборы записей до этого) навсегда.
Сделайте select / join / group / crazySQL, измените, передайте изменения обратно.
PLINQO хорош, потому что он избавляет от хлопот LINQ2SQL в его сырой форме (многие 2 многие, deatached, регенерация контекста, кеш и т. Д.), Но это все еще LINQ, поэтому должны применяться методы DLINQ.
Чего мне не хватает?
note : Не путайте PLinq с PLinqO.