powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
74 сообщений из 74, показаны все 3 страниц
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38416561
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как известно, LINQ не поддерживает конструкторы с параметрами. А что, если у меня вся логика в конструкторе основана именно на параметрах и мне нужно их обязательно передать? В LINQ я могу использовать для этого только инициализатор объекта, но логика-то у меня работает именно с параметрами конструктора и именно в конструкторе с параметрами.

Как поступить?
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38416564
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Заталкивать одну и ту же логику и в конструктор с параметрами, и в конструктор без параметров? - Фигня получается, да и юзер может попытаться использовать конструктор без параметров без инициализатора объекта, что приведёт к сбою работы логики в нём.
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38416568
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Как известно, LINQ не поддерживает конструкторы с параметрами.
Что это за бред?

user7320А что, если у меня вся логика в конструкторе...
За логику в конструкторе нужно скручивать руки и засовывать их догадайся куда.

user7320В LINQ я могу использовать для этого только инициализатор объекта
Ты что там куришь? Что за инициализатор объекта?
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38416579
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторюзер может попытаться использовать конструктор без параметров без инициализатора объектаМожно скрыть от юзера конструктор без параметров.
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38416585
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя может он и от линка скроется?
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38416646
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЧто за инициализатор объекта?
http://msdn.microsoft.com/en-us/library/vstudio/bb384062.aspx

авторавторКак известно, LINQ не поддерживает конструкторы с параметрами.Что это за бред?
http://stackoverflow.com/questions/3571084/only-parameterless-constructors-and-initializers-are-supported-in-linq-to-entiti

авторЗа логику в конструкторе нужно скручивать руки и засовывать их догадайся куда.
Там логика, которая строит экземляр - свойства там заполняет и всё такое. В частности, в конструкторе выполняется запрос к БД через LINQ to Entities. Для этого нужны параметры.
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38416650
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyХотя может он и от линка скроется?
Ну да.
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38416684
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320авторЧто за инициализатор объекта?
http://msdn.microsoft.com/en-us/library/vstudio/bb384062.aspx
Причем тут LINQ?

user7320 http://stackoverflow.com/questions/3571084/only-parameterless-constructors-and-initializers-are-supported-in-linq-to-entiti
И в чем проблема?

user7320В частности, в конструкторе выполняется запрос к БД через LINQ to Entities. Для этого нужны параметры.
Расстреливать на месте.
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38416741
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУuser7320пропущено...

http://msdn.microsoft.com/en-us/library/vstudio/bb384062.aspx
Причем тут LINQ?

user7320 http://stackoverflow.com/questions/3571084/only-parameterless-constructors-and-initializers-are-supported-in-linq-to-entiti
И в чем проблема?

user7320В частности, в конструкторе выполняется запрос к БД через LINQ to Entities. Для этого нужны параметры.
Расстреливать на месте.
А как надо?
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38416759
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320А как надо?
Честно признаться, я даже твою проблему не понял :) Напиши кодом, что у тебя не получается. Может, это трудности изложения...
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38416788
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУuser7320А как надо?
Честно признаться, я даже твою проблему не понял :) Напиши кодом, что у тебя не получается. Может, это трудности изложения...
У меня старая тема . Мне надо создать сложный объект, у которого есть поля-коллеции, у которых свои поля-коллекции и т. д. Все поля заполнить нужно из БД, причём выборки надо проводить по определённым параметрам. Вы там все упёрлись в репозиторий. И как тут поможет репозиторий или ещё какая штука, чтобы создать такой объект?

Я не знаю, почему EF не поддерживает конструкторы с параметрами, но если бы поддерживал, то у меня бы не было проблем.
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38416802
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38416833
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ

Смотри, как я придумал - и не надо в конструкторы передавать контекст или создавать по новому контексту в каждом конструкторе:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
public MyModel()
{
  using (MyEntities db = new MyEntities())
  {
    this.Groups = new ReadOnlyCollection<GroupModel>(
      (from wg in db.WeedGroups
       select new GroupModel()
       {
         Id = wg.Id,
         DisplayName = wg.Name,
         Description = wg.Description,
         Biogroups = new ReadOnlyCollection<BiogroupModel>(
           db.Biogroups
           .Where(b => b.WeedGroup.Name == wg.Name)
           .OrderBy(b => b.Name)
           .Select(b => new BiogroupModel()
           {
             Id = b.Id,
             DisplayName = b.Name
           }).ToList())
       }).ToList());
  }
}



Если что, я раньше спрашивал, чтобы в конструктор типа GroupModel передать контекст БД или в нём самом создавать этот контект. Потому что коллецию Biogroups у типа GroupModel заполнял в конструкторе GroupModel. А теперь всё делаю один запросов в инициализаторах. Не то, чтобы я раньше об этом не знал... но как-то подзабыл. И получается, что тот вопрос отпал.

Ну, это же значительно лучше, чем у меня раньше было? Что вы об этом думаете?

И да, я пока не буду репозиторий использовать всё равно. Ведь раньше же как-то жили без репозиториев и ничего - спутники летали, корабли плавали.
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38416835
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне только интересно, во что такой запрос линка выльется в SQL. Наверное, там такая каша будет...
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38416888
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320И да, я пока не буду репозиторий использовать всё равно. Ведь раньше же как-то жили без репозиториев и ничего - спутники летали, корабли плавали.Репозиторий - это тупо класс, что инкапсулирует в себе логику работы с хранимыми данными. Кто-то когда-то выделил этот класс, так как ему это было надо в практических целях, и использовал такой подход в последующих проектах. Получился шаблон. До появления шаблона каждый делал по своему, и сейчас не запрещается поступать также.

Не хочешь, не используй. Проектируй свои собственные классы.
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38416987
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как насчёт предложенного мной запроса выше ? Какие могут быть минусы при использовании таких... эмм... каскадов инициализаторов объектов в LINQ-выражениях?
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38417056
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320, используется ToList(), то есть будет fetch из WeedGroups, и во время него будет выполняться запрос к Biogroups.
Может вылететь исключение, что нельзя открыть DataReader, т.к. уже есть один открытый.
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38417072
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А про обращение к БД в конктрукторе доменного объекта я промолчу.
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38417210
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAА про обращение к БД в конктрукторе доменного объекта я промолчу.
Ну, вы как бы не замечайте этого. Я же сказал, что пока без репозитория.

skyANAuser7320, используется ToList(), то есть будет fetch из WeedGroups, и во время него будет выполняться запрос к Biogroups.
Может вылететь исключение, что нельзя открыть DataReader, т.к. уже есть один открытый.
А что значит "может вылететь"? Я вот запустил пару раз - и всё открылось и выполнилось. При каких условиях может, а при каких не может? Памяти ему не хватит, или количество DataReader'ов ограничего?



Я щас запустил этот код - странно, но почему-то он выдал "Only parameterless constructors and initializers are supported in LINQ to Entities". Это чего, и ReadOnlyCollection тоже нельзя применять, если она с параметров в конструкторе?

UPD. Вы меня уговорили. Вместо IReadOnlyCollection стал использовать IEnumerable. Но не потому, что так типа нужно, а потому, что в линке нельзя использовать параметризованные конструкторы (словил исключение - у ReadOnlyCollection конструктор всего один и обязательно с параметром). И да, убрал ToList в середине запроса. Но не потому, что там типа ДатаРидеров не хватит, а потому, что линк не понимает таких выражений (тоже словил исключение).

В результате получилось вот что. Ну, как теперь?


Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
// Это делается в репозитории. ЧЕСНА!!!

using (CropsProtectionDBLibrary.CropsProtectionEntities db = new CropsProtectionDBLibrary.CropsProtectionEntities())
{
  this.Groups = (from wg in db.WeedGroups
           select new GroupModel()
           {
             Id = wg.Id,
             DisplayName = wg.Name,
             Description = wg.Description,
             Biogroups = db.Biogroups
                   .Where(b => b.WeedGroup.Name == wg.Name)
                   .OrderBy(b => b.Name)
                   .Select(b => new BiogroupModel()
                   {
                     Id = b.Id,
                     DisplayName = b.Name
                   })
           }).ToList();
}
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38417247
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Это делается в репозитории. ЧЕСНА!!!Ага, так я и проверил. Использование this.Groups в этом не убеждает.
А в остальном... должно работать...
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38417260
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320UPD. Вы меня уговорили. Вместо IReadOnlyCollection стал использовать IEnumerable. Но не потому, что так типа нужно, а потому, что в линке нельзя использовать параметризованные конструкторы (словил исключение - у ReadOnlyCollection конструктор всего один и обязательно с параметром). И да, убрал ToList в середине запроса. Но не потому, что там типа ДатаРидеров не хватит, а потому, что линк не понимает таких выражений (тоже словил исключение).Проектирование доменной можеди завязано на "в линке нельзя использовать параметризованные конструкторы", смешно.
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38417360
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAuser7320Это делается в репозитории. ЧЕСНА!!!Ага, так я и проверил. Использование this.Groups в этом не убеждает.
А в остальном... должно работать...
Я проверил - работает.


А у меня такой вопрос. Кто-нибудь смешивал в одном проекте ORM'ы EF от нескольких БД, при этом сами ORM'ы сгенерены EF разных версий? В частности, у меня в старом проекте надо было добавить функциональности, для этого требовалось подключение к дополнительной БД. Со старой БД соединялся с помощью ORM от EF версии то ли 1.х, то ли 4.0 - вобщем, когда он ещё не умел POCO делать. А с новой БД - с помощью POCO ORM. Ну, и в старом ORM вылетало исключение "Could not find the conceptual model type..." (ситуация типа такой ). В обоих случаях подходы Database First. Вынесение ОРМа новой БД в новый проект того же солюшена не помогло. Переделка старого ОРМа под POCO повлекла ошибки залогинивания, причём как при обращении к старой БД, так и к новой, что на одном сервере, что на другом (на моей машине копия по структуре продакшеновой БД стоит). Насколько я нарыл в Инете, это скорее связано с какими-то настройками то ли СУБД, то ли ОС с её правами доступа. Только штука в том, что если создать новый, пустой проект, и поместить туда два этих ОРМа (к новой и к старой БД), то всё работает и проблем с залогиниванием нет.

Я решил пока это так: вынес ОРМ к новой БД в отдельный солюшен, и подключился из старого солюшена к сборке солюшена с новым ОРМ.

Вобщем, я не прошу во всю эту писанину вникать, просто хочу узнать - кто-нибудь комбинировал ОРМы старых и новых версий EF (особенно с POCO и без) в одном проекте и были ли при этом какие-нибудь проблемы?
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38417415
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320,
все равно, репозитарий не буду делать (с)
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38417558
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиuser7320,
все равно, репозитарий не буду делать (с)
Вы ещё скажите, что каждое ОРМ у вас в своём репозитории, а не все в одном.
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38417559
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Где-то в степиuser7320,
все равно, репозитарий не буду делать (с)
Вы ещё скажите, что каждое ОРМ у вас в своём репозитории, а не все в одном.
А каждый репозиторий - отдельный солюшен.

Проблема-то всё равно должна остаться та же, что я описал.
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38417619
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Где-то в степиuser7320,
все равно, репозитарий не буду делать (с)
Вы ещё скажите, что каждое ОРМ у вас в своём репозитории, а не все в одном.Когда реализован репозиторий, то изначально мы получает от него объекты доменной модели, и не нужно танцевать с бубном вокругuser7320Переделка старого ОРМа под POCO повлекла ошибки залогинивания, причём как при обращении к старой БД, так и к новой, что на одном сервере, что на другом (на моей машине копия по структуре продакшеновой БД стоит). Насколько я нарыл в Инете, это скорее связано с какими-то настройками то ли СУБД, то ли ОС с её правами доступа.и смешивать в одном проекте! EF разных версий.
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38417621
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320user7320пропущено...

Вы ещё скажите, что каждое ОРМ у вас в своём репозитории, а не все в одном.
А каждый репозиторий - отдельный солюшен.

Проблема-то всё равно должна остаться та же, что я описал.Проблемы кривой архитектуры решаются рефакторингом.
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38417935
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAuser7320пропущено...

Вы ещё скажите, что каждое ОРМ у вас в своём репозитории, а не все в одном.Когда реализован репозиторий, то изначально мы получает от него объекты доменной модели, и не нужно танцевать с бубном вокругuser7320Переделка старого ОРМа под POCO повлекла ошибки залогинивания, причём как при обращении к старой БД, так и к новой, что на одном сервере, что на другом (на моей машине копия по структуре продакшеновой БД стоит). Насколько я нарыл в Инете, это скорее связано с какими-то настройками то ли СУБД, то ли ОС с её правами доступа.и смешивать в одном проекте! EF разных версий.
Даже если вы будете делать репозиторий, вы же не откажетесь от EF? Так репозиторий у вас каждый в своей сборке по числу БД, или всё в одном проекте, да ещё и в том, что и основная программа? У меня проблема, что конфликтуют ORM от разных версий EF в одной и той же сборке.
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38417992
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320skyANAпропущено...
Когда реализован репозиторий, то изначально мы получает от него объекты доменной модели, и не нужно танцевать с бубном вокругпропущено...
и смешивать в одном проекте! EF разных версий.
Даже если вы будете делать репозиторий, вы же не откажетесь от EF? Так репозиторий у вас каждый в своей сборке по числу БД, или всё в одном проекте, да ещё и в том, что и основная программа?Да репозиторий каждый в своей сборке по числу поставщиков данных (это не обязательно БД).user7320У меня проблема, что конфликтуют ORM от разных версий EF в одной и той же сборке.Используй везде отдну версию EF, проведи рефакторинг. Так можно 100500 сторонних библиотек заюзать: в этом проекте используем такую версию, в этом другую, - что за зоопарк, блеать?
Или тебе предложить костыль? Загружай их в разные домены приложения. Но боюсь ты и вразных доменах на какую-нибудь херню напорешься.
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38418444
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAuser7320пропущено...

Даже если вы будете делать репозиторий, вы же не откажетесь от EF? Так репозиторий у вас каждый в своей сборке по числу БД, или всё в одном проекте, да ещё и в том, что и основная программа?Да репозиторий каждый в своей сборке по числу поставщиков данных (это не обязательно БД).user7320У меня проблема, что конфликтуют ORM от разных версий EF в одной и той же сборке.Используй везде отдну версию EF, проведи рефакторинг. Так можно 100500 сторонних библиотек заюзать: в этом проекте используем такую версию, в этом другую, - что за зоопарк, блеать?
Или тебе предложить костыль? Загружай их в разные домены приложения. Но боюсь ты и вразных доменах на какую-нибудь херню напорешься.
А какой принцип, по которому вы разделяете на разные сборки куски приложения? У вас над каждым куском свой человек работает, поэтому вы потом все DLL линкуете, или как?

Вот, положим, есть шаблон MVVM в WPF. Вот эти вот M, VM и V тоже надо разделять? Скажем, модель в одну сборку, а модель представления и представление (т. к. они завязаны на одну технологию) - вдругую? Потом, скажем, слой общения с веб-службами, слой авторизации и аутентификации - тоже каждый в свою DLL? Плюс сборки - по одной на каждый репозиторий (т. е. на каждый поставщик данных)?
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38418493
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320, я же написал, что репозиторий каждый в своей сборке по числу поставщиков данных (это не обязательно БД).
Что тут не понятно?
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38418509
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAuser7320, я же написал, что репозиторий каждый в своей сборке по числу поставщиков данных (это не обязательно БД).
Что тут не понятно?
Непонятно, как делить программу на сборки окромя репозиториев.
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38418701
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320skyANAuser7320, я же написал, что репозиторий каждый в своей сборке по числу поставщиков данных (это не обязательно БД).
Что тут не понятно?
Непонятно, как делить программу на сборки окромя репозиториев.Дак может её и не надо делить на сборки?

Приложения WPF с шаблоном проектирования модель-представление-модель представления
В начале статьи есть ссылка на исходники проекта. Посмотри как они организованы: разложены по папкам.
Начни с этого: разложи классы по файлам и папкам, а когда вдруг поймёшь, что отдельную папку стоит вынести в отдельный проект, то и вынесешь.

P.S.: в процессе изучения MVVM ты не наткнулся ни на один пример проекта?
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38419014
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAuser7320пропущено...

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

Приложения WPF с шаблоном проектирования модель-представление-модель представления
В начале статьи есть ссылка на исходники проекта. Посмотри как они организованы: разложены по папкам.
Начни с этого: разложи классы по файлам и папкам, а когда вдруг поймёшь, что отдельную папку стоит вынести в отдельный проект, то и вынесешь.

P.S.: в процессе изучения MVVM ты не наткнулся ни на один пример проекта?
Меня уже тошнит от той статьи. Я давно всё там перелопатил, включая пример проекта. Давно всё пихаю по папках (пространствам имён) и прочее. Я пробовал делать свой проект, где каждая часть (репозиторий, модели, модели представления с представлениями) разложены по своим солюшенам. Запускал три версии Студии и работал. Получилось хреново. Лучше, если уж на проекты делить, то всё в одном солюшене, ибо задолбало копмилить каждый раз три солюшена из-за того, что в солюшене моделей что-то поменялось (остальные-то части на модели ссылаются). Тут с EF получилось, что его ORM и его репозиторий лучше хранить в отдельном проекте потому, что старые версии EF были толи багованые, толи фичёванные , а не потому, что так "по архитектуре надо".
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38419020
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320 толи багованые, толи фичёванные
Кстати, у меня в обоих случаях "DB first", но ошибка такая же.
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38419046
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320skyANAпропущено...
Дак может её и не надо делить на сборки?

Приложения WPF с шаблоном проектирования модель-представление-модель представления
В начале статьи есть ссылка на исходники проекта. Посмотри как они организованы: разложены по папкам.
Начни с этого: разложи классы по файлам и папкам, а когда вдруг поймёшь, что отдельную папку стоит вынести в отдельный проект, то и вынесешь.

P.S.: в процессе изучения MVVM ты не наткнулся ни на один пример проекта?
Меня уже тошнит от той статьи. Я давно всё там перелопатил, включая пример проекта. Давно всё пихаю по папках (пространствам имён) и прочее. Я пробовал делать свой проект, где каждая часть (репозиторий, модели, модели представления с представлениями) разложены по своим солюшенам. Запускал три версии Студии и работал. Получилось хреново. Лучше, если уж на проекты делить, то всё в одном солюшене, ибо задолбало копмилить каждый раз три солюшена из-за того, что в солюшене моделей что-то поменялось (остальные-то части на модели ссылаются). Тут с EF получилось, что его ORM и его репозиторий лучше хранить в отдельном проекте потому, что старые версии EF были толи багованые, толи фичёванные , а не потому, что так "по архитектуре надо".Короче, Склифосовский! Что тебя конкретно не устраивает?

Солюшины - фигушины. Компилить его задолбало.
Можно создать солюшн, что будет содержать в себе другие солюшины.
Есть GAC, есть NuGet, есть такое понятие, как Artifact Repository. Ты чего хочешь добиться-то?
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38419060
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может, папиффку? Ты у себя и своё, а я у себя и своё? ))
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38420638
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320skyANAА про обращение к БД в конктрукторе доменного объекта я промолчу.
Ну, вы как бы не замечайте этого. Я же сказал, что пока без репозитория.

skyANAuser7320, используется ToList(), то есть будет fetch из WeedGroups, и во время него будет выполняться запрос к Biogroups.
Может вылететь исключение, что нельзя открыть DataReader, т.к. уже есть один открытый.
А что значит "может вылететь"? Я вот запустил пару раз - и всё открылось и выполнилось. При каких условиях может, а при каких не может? Памяти ему не хватит, или количество DataReader'ов ограничего?



Я щас запустил этот код - странно, но почему-то он выдал "Only parameterless constructors and initializers are supported in LINQ to Entities". Это чего, и ReadOnlyCollection тоже нельзя применять, если она с параметров в конструкторе?

UPD. Вы меня уговорили. Вместо IReadOnlyCollection стал использовать IEnumerable. Но не потому, что так типа нужно, а потому, что в линке нельзя использовать параметризованные конструкторы (словил исключение - у ReadOnlyCollection конструктор всего один и обязательно с параметром). И да, убрал ToList в середине запроса. Но не потому, что там типа ДатаРидеров не хватит, а потому, что линк не понимает таких выражений (тоже словил исключение).

В результате получилось вот что. Ну, как теперь?


Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
// Это делается в репозитории. ЧЕСНА!!!

using (CropsProtectionDBLibrary.CropsProtectionEntities db = new CropsProtectionDBLibrary.CropsProtectionEntities())
{
  this.Groups = (from wg in db.WeedGroups
           select new GroupModel()
           {
             Id = wg.Id,
             DisplayName = wg.Name,
             Description = wg.Description,
             Biogroups = db.Biogroups
                   .Where(b => b.WeedGroup.Name == wg.Name)
                   .OrderBy(b => b.Name)
                   .Select(b => new BiogroupModel()
                   {
                     Id = b.Id,
                     DisplayName = b.Name
                   })
           }).ToList();
}


Есть ли смысл так делать, елси у меня свойство this.Groups типа IEnumerable? Тут ещё штука в том, что по этому свойству модели (ASP.NET MVC) надо в представлении не только пройтись форичем, но и знать число элементов этой коллеции, чтобы растянуть на это число ячейки в табличке. Использовать IEnumerable.Count() - лишний раз проходить по коллеции (я так понимаю, что этот метод именно проходит по ней, чтобы посчитать число всех элементов). Какой в таком случае лучше свойству this.Groups поставить тип? IList будет достаточно?
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38420821
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320,
авторя так понимаю, что этот метод именно проходит по ней, чтобы посчитать число всех элементов
Вы нехправильно понимаете, ну вы что - полный кретин, что документацию почитать не можете..
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38420857
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиuser7320,
авторя так понимаю, что этот метод именно проходит по ней, чтобы посчитать число всех элементов
Вы нехправильно понимаете, ну вы что - полный кретин, что документацию почитать не можете..
А как он узнаёт число элементов? Где об этом написано?
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38420923
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320,
поиграйся
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
 static readonly List<int> TestList=new List<int>(new[]{1,3,4,5,6,7}); 
        static void Main(string[] args)
        {
            var res = ReferenceEquals(TestList, GetFoo());
           // var rrr = GetFoo().Count();
          var rrr = ((ICollection<int>) GetFoo()).Count();

        }
        static IEnumerable<int> GetFoo()
        {
            //foreach (var i in TestList)
            //{
            //    yield return i;
            //}
            return TestList;
        } 


как бы еще наводящий., в каких случаях выгодно орм выкидывать наружу чистый IEnumerable
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38420930
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Где-то в степиuser7320,
пропущено...

Вы нехправильно понимаете, ну вы что - полный кретин, что документацию почитать не можете..
А как он узнаёт число элементов? Где об этом написано?Мда, и не стыдно такие вопросы задавать?

Enumerable.Count<TSource> Method (IEnumerable<TSource>)
RemarksIf the type of source implements ICollection<T> , that implementation is used to obtain the count of elements. Otherwise, this method determines the count.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
/// <summary>Returns the number of elements in a sequence.</summary>
/// <returns>The number of elements in the input sequence.</returns>
/// <param name="source">A sequence that contains elements to be counted.</param>
/// <typeparam name="TSource">The type of the elements of <paramref name="source" />.</typeparam>
/// <exception cref="T:System.ArgumentNullException">
///   <paramref name="source" /> is null.
/// </exception>
/// <exception cref="T:System.OverflowException">
///   The number of elements in <paramref name="source" /> is larger than <see cref="F:System.Int32.MaxValue" />.
/// </exception>
[__DynamicallyInvokable]
public static int Count<TSource>(this IEnumerable<TSource> source)
{
    if (source == null)
    {
        throw Error.ArgumentNull("source");
    }

    ICollection<TSource> tCollection = source as ICollection<TSource>;

    if (tCollection != null)
    {
        return tCollection.Count;
    }

    ICollection collection = source as ICollection;

    if (collection != null)
    {
        return collection.Count;
    }

    int num = 0;

    using (IEnumerator<TSource> enumerator = source.GetEnumerator())
    {
        while (enumerator.MoveNext())
        {
            num++;
        }
    }

    return num;
}
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38421032
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAМда, и не стыдно такие вопросы задавать?

Enumerable.Count<TSource> Method (IEnumerable<TSource>)Remarks
If the type of source implements ICollection<T>, that implementation is used to obtain the count of elements. Otherwise, this method determines the count.
Я несколько раз ещё раньше прочёл эти строчки там и так и не понял, КАК ИМЕННО Count() получает число элементов. Беглый осмотр трёх результатов на StackOverflow привёл к ответам типа "только через итерацию, прямого свойства нет". Только углубившись, обнаружил пример, подобный вашему . Я так понимаю, это из исходников ("Рефлектором" посмотрели или что-то такое?)?

К сожалению, я больше реагировал на зелёные галочки там, забыв, что неграмотных или незнающих хватает и на StackOverflow, несмотря на их тыщи и десятки тыщь репутации.

Тогда касательно моего пример, если я в конце запроса вызываю ToList(), то возвращается список, который поддерживает ICollection и метод Count() может считать уже готовое свойство Count. Если же оставить результат как IQueryble, то Count() будет именно перебирать элементы. Правильно?


Стоит, однако, заметить, что это довольно неоднозначное поведение. Мне бы больше понравилось, если бы методы всегда перебирали элементы, а свойства - возвращали готовое значение. А так нужно всегда запоминать специальное поведение в специальных случаях, написанное где-то в глубине статьи мелким шрифтом.

Спасибо за наводки.
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38421034
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степикак бы еще наводящий., в каких случаях выгодно орм выкидывать наружу чистый IEnumerable
При жадной загрузке?
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38421066
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Где-то в степикак бы еще наводящий., в каких случаях выгодно орм выкидывать наружу чистый IEnumerable
http://stackoverflow.com/a/2876655/808128
Что-то я запутался... Ну вот. У метода Select есть два исполнения - для Queryable и для Enumerable вариантов. Судя по ссылке, они довольно сильно различаются по фактическому исполнению кода, а вот тут , например, предалагают в четвёртом примере в Remarks использовать лямбда-выражения вместо делегата Func. Подумаешь - делегат или лямбду! А то, что это будет либо в СУБД выполняться, либо у клиента на машине - внимания они не обращают?

Т. е. передал в параметр delegate(...){...} - получил исполнение в БД. Написал лямбду (что я всегда делаю, т. к. удобнее) - получил OutOfMemoryException?
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38421135
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Т. е. передал в параметр delegate(...){...} - получил исполнение в БД. Написал лямбду (что я всегда делаю, т. к. удобнее) - получил OutOfMemoryException?
Т. е., наоборот - с лямбдой - на сервере, а с делегатом - на клиенте.
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38421173
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня сразу несколько вопросов возникло.


1.

авторIf the type of source implements ICollection<T>, that implementation is used to obtain the count of elements. Otherwise, this method determines the count.
А можете ещё пояснить эту фразу? Конкретно, какой вложенности "type of source" имеется ввиду? Например, я получаю результат запроса в виде IQuerayble, перевожу его в List через ToList(), потом отдаю это в свойство, которое показывает IEnumerable. Пользователь свойства считывает его и применяет метод Count(). В этом случае что имеется ввиду под "type of source": IEnumerable, List, IQuerayble или что-то ещё?


2.

Я так понимаю, что даже если в свойство попадает полнофункциональный List, то показывая его как IEnumerable, я обрезаю ему функциональность до банального перебора коллекции и только?


3.

Теперь учтём сразу 1 и 2. Пользователь моего свойства не знает, что служит источником для этого свойства. И если я показываю ему IEnumerable, то использовать расширение Enumerable.Count() он не имеет права, т. к. может загрузить как не знает, поддерживает ли источник этого свойства ICollection или нет. Так? Вот теперь тут всплывает наш старый спор - почему бы не заменить экспозицию свойства как IReadOnlyCollection на как IEnumerable, как предлагал skyANA. А потому что накладных расходов всё равно нет, если я в конце запроса вызываю ToList(), зато через IReadOnlyCollection я могу пользователю моего свойства явно сказать, что свойство можно не только перебирать, но и получить у него готовое число элементов Count, не боясь лишних переборов коллеции.

Т. е. если я сам пишу свойства и сам их использую - то да, можно IEnumerable и потом для него вызывать расширитель Count(). Но в общем случае надо всегда показывать через тип возврата, что можно делать, а что нельзя. Правильно?
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38421179
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38421185
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320skyANAМда, и не стыдно такие вопросы задавать?

Enumerable.Count<TSource> Method (IEnumerable<TSource>)Remarks
If the type of source implements ICollection<T>, that implementation is used to obtain the count of elements. Otherwise, this method determines the count.
Я несколько раз ещё раньше прочёл эти строчки там и так и не понял, КАК ИМЕННО Count() получает число элементов.
Ах, вот оно что, тебе смысл данного замечания не понятен. Плохо.
В следующий раз так и пиши: прочитал документацию и всё равно не понимаю как работает IEnumerable.Count, что означают эти строки?
Вместо рассуждений типа:user7320Использовать IEnumerable.Count() - лишний раз проходить по коллеции... бла бла блаТы своими рассуждениями выставляешь себя в не лучшем виде.

user7320Я так понимаю, это из исходников ("Рефлектором" посмотрели или что-то такое)?Да, это исходники System.Core.dll. Смотрел при помощи JustDecompile.

user7320Стоит, однако, заметить, что это довольно неоднозначное поведение. Мне бы больше понравилось, если бы методы всегда перебирали элементы, а свойства - возвращали готовое значение. А так нужно всегда запоминать специальное поведение в специальных случаях, написанное где-то в глубине статьи мелким шрифтом.Жалкая попытка оправдать свою глупость.
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38421187
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAuser7320Стоит, однако, заметить, что это довольно неоднозначное поведение. Мне бы больше понравилось, если бы методы всегда перебирали элементы, а свойства - возвращали готовое значение. А так нужно всегда запоминать специальное поведение в специальных случаях, написанное где-то в глубине статьи мелким шрифтом.Жалкая попытка оправдать свою глупость.
Я не пытаюсь оправдать свою глупость. То, что я глуп, видно и так - с этим глупо спорить. Я уже разобрался, как это работает. Меня теперь больше интересует мой последний длинный пост - я всё же там прав или нет, по-вашему?
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38421217
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Касательно этого моего поста. Нет, всё же, требование конструкторов без параметров в линке не даёт мне воспользоваться ReadOnlyCollection. Тогда остаётся узнать, что имеется ввиду под "the type of source ".

И ещё, есть способ узнать, при вызове Count() начинается итерация по коллеции или всего лишь считывается готовое свойство? Скажем, под дебагом залезть во внутрь Enumerable>Count() можно, и посмотреть, выполнилось ли там условие (если следовать примеру skyANA)

Код: c#
1.
2.
3.
4.
if (tCollection != null)
{
    return tCollection.Count;
}



?
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38421312
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320У меня сразу несколько вопросов возникло.

1.

авторIf the type of source implements ICollection<T>, that implementation is used to obtain the count of elements. Otherwise, this method determines the count.
А можете ещё пояснить эту фразу? Конкретно, какой вложенности "type of source" имеется ввиду? Например, я получаю результат запроса в виде IQuerayble, перевожу его в List через ToList(), потом отдаю это в свойство, которое показывает IEnumerable. Пользователь свойства считывает его и применяет метод Count(). В этом случае что имеется ввиду под "type of source": IEnumerable, List, IQuerayble или что-то ещё?List

user73202.

Я так понимаю, что даже если в свойство попадает полнофункциональный List, то показывая его как IEnumerable, я обрезаю ему функциональность до банального перебора коллекции и только?Да. Это называется инкапсуляция.

user73203.

Теперь учтём сразу 1 и 2. Пользователь моего свойства не знает, что служит источником для этого свойства. И если я показываю ему IEnumerable, то использовать расширение Enumerable.Count() он не имеет права, т. к. может загрузить как не знает, поддерживает ли источник этого свойства ICollection или нет. Так? Вот теперь тут всплывает наш старый спор - почему бы не заменить экспозицию свойства как IReadOnlyCollection на как IEnumerable, как предлагал skyANA. А потому что накладных расходов всё равно нет, если я в конце запроса вызываю ToList(), зато через IReadOnlyCollection я могу пользователю моего свойства явно сказать, что свойство можно не только перебирать, но и получить у него готовое число элементов Count, не боясь лишних переборов коллеции.

Т. е. если я сам пишу свойства и сам их использую - то да, можно IEnumerable и потом для него вызывать расширитель Count(). Но в общем случае надо всегда показывать через тип возврата, что можно делать, а что нельзя. Правильно?Правильно - это изучать принципы ООП, а не выдумывать их.

Восемь принципов программирования, которые могут облегчить вам жизнь
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38421337
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Касательно этого моего поста. Нет, всё же, требование конструкторов без параметров в линке не даёт мне воспользоваться ReadOnlyCollection. Тогда остаётся узнать, что имеется ввиду под "the type of source ".Блеать! Ты каким местом документацию читаешь?

Enumerable.Count<TSource> Method (IEnumerable<TSource>)
Код: c#
1.
2.
3.
public static int Count<TSource>(
	this IEnumerable<TSource> source
)


Parameters

source - a sequence that contains elements to be counted.

Под "the type of source " имеется ввиду конкретный тип параметра source !

user7320И ещё, есть способ ... под дебагом залезть во внутрь Enumerable>Count()? How to: Debug .NET Framework Source
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38421787
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторБлеать! Ты каким местом документацию читаешь?

Код: c#
1.
2.
3.
4.
Enumerable.Count<TSource> Method (IEnumerable<TSource>)
public static int Count<TSource>(
	this IEnumerable<TSource> source
)


Ну вот мы и видим, что IEnumerable<TSource> source не поддерживает Count(), а значит, расширитель будет использовать проход по коллекции.

Но если вы скажете, что тут задействована ковариация, и компилятор может определить, что под IEnumerable<TSource> source сидит какой-нибудь ICollection, и тогда он воспользуется его свойством Count без прохода по коллеции... Или вы так не скажите?

авторПод "the type of source" имеется ввиду конкретный тип параметра source!
Т. е. таки ковариация? - Любой тип, унаследованный от IEnumerable?
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38421823
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAuser7320И ещё, есть способ ... под дебагом залезть во внутрь Enumerable>Count()? How to: Debug .NET Framework Source
Проверил - код сразу возвращает Count, а не вычисляет его. Значит, с ковариацией моя догадка была верна.
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38421958
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320skyANAпропущено...
How to: Debug .NET Framework Source
Проверил - код сразу возвращает Count, а не вычисляет его.Это ясно сразу после прочтения документации. Но тебе понадобилось потратить туеву хучу времени, чтобы убедиться. Молодец!
user7320Значит, с ковариацией моя догадка была верна.Ты толком не понял, что такое ковариация.
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38422059
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAuser7320Значит, с ковариацией моя догадка была верна.Ты толком не понял, что такое ковариация.
Почему? - Это когда можно передавать объект типа, более унаследованного, чем объявленный. У МС, правда, вводятся ещё всякие ограничения, когда это применяется для параметров или возвращаемых значений.
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38422065
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320skyANAпропущено...
Ты толком не понял, что такое ковариация.
Почему? - Это когда можно передавать объект типа, более унаследованного, чем объявленный.Нет, это не правильное определение. Ты его сам придумал? А что такое полиморфизм в твоём понимании?
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38422079
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAuser7320пропущено...

Почему? - Это когда можно передавать объект типа, более унаследованного, чем объявленный.Нет, это не правильное определение. Ты его сам придумал? А что такое полиморфизм в твоём понимании?
Ладно, преположим, что я не знаю, что такое ковариация и прочие такие штуки. Но вопрос-то (первый абцаз в моём комментарии) остаётся! Т. е. расширитель будет использовать проход по коллеции. А он на деле не использует! Как же так?
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38422232
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320, ты завязывай траву-то курить.
Тебе уже и ссылку на документацию дали, и код метода расширения, и ты убедился в том, что он работает так, как написан. А всё равно не врубаешься.
Высохли походу мозги-то
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38422282
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAuser7320, ты завязывай траву-то курить.
Тебе уже и ссылку на документацию дали, и код метода расширения, и ты убедился в том, что он работает так, как написан. А всё равно не врубаешься.
Высохли походу мозги-то
Ладно, будем отталкиваться от этого поста . Вы, конечно, прямо не говорите, но я так понимаю, что согласны, что компилятор знает, какой конкретный тип сидит под IEnumerable во время выполнения, реализует ли этот тип ICollection и в результате применяет или не применяет уже заполненное свойство Count при вызове расширяющего метода Count(). Но пользователь-то, который считывает моё свойство IEnumerable, не знает всего этого! Как же тут тогда быть? Это же, как её, инкабсумляция, мать её! Как:

1) дать ему возможность перебрать свойство this.Groups;

2) дать ему возможность считать (не вычислить перебором!) число элементов коллекции этого свойства;

3) не дать ему возможности добавлять и изменять элементы в коллеции явно (т. е. обойтись без всяких ICollection; если будет копировать коллецию в другую, где сможет менять всё, что захочет - его проблемы);

4) не показывать ему код модели (т. е. он не знает, что там сидит под IEnumerable или какое я свойство ему выставлю) - т. е. он не может рассчитывать на вызов метода (Count(), например), не зная, сколько это ему будет стоит;

5) чтобы свойство имело не конкретный тип, а абстрактный, потому что так говорят великие десять заповедей восемь принципов ООП;

6) чтобы у этого типа были конструкторы без параметров, чтобы можно было использовать инициализацию в LINQ?

Вроде, ничего не забыл.

У меня такое ощущение, что я пытаюсь донести все эти пункты, а мне говорят "ну вот же тебе IEnumerable - он удовлетворяет четырём твоим трбованиям", или "любые три из шести", или "5 из 36" - спортлото какое-то получается.

На вскидку:

IEnumerable не подходит по п.4;
ICollection - п. 3;
IReadOnlyCollection - п. 6, т. к. реализует этот тырфейс из подходящих мне коллеций только ReadOnlyCollection, у которой конструктор с параметром - т. е. в линке не работает.
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38422323
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320, ну у тебя походу два выхода: переписать код нормально, либо реализовать свой класс коллекции, блеать!
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38422362
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или добавить свойство:
Код: c#
1.
public int GroupsCount { get; }
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38422780
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Короче, если есть каунт, то ленивые загрузки уже не катят, а раз так, то гулять так гулять. Тем более, что там не более 20 записей в одной таблице и на каждую из них по 0-5 записей через связь. Чёжь вы сразу не сказали, что надо делать так:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
public class GroupModel
{
    public IReadOnlyCollection<BiogroupModel> Biogroups { get; set; }
}

public class MyModel
{
    public IReadOnlyCollection<GroupModel> Groups { get; private set; }
    
    public MyModel()
    {
        using (DBLibrary.MyEntities db = 
		    new DBLibrary.MyEntities())
        {
            this.Groups = 
                (from wg in db.WeedGroups
                 select wg)
                 .ToList() // <-------------- СУТЬ!
                 .Select(selectedWG => new GroupModel()
                 {
                     Biogroups = selectedWG.Biogroups
                     .OrderBy(b => b.Name)
                     .Select(b => new BiogroupModel()
                     {
                         Id = b.Id,
                         DisplayName = b.Name
                     })
                     .ToList()
                     .AsReadOnly()
                 })
                 .ToList()
                 .AsReadOnly();
        }
    }
}



Вся суть в ToList после "from wg in db.WeedGroups select wg". Вот теперь эта штука удовлетворяет всем 6 требованиям. В смысле, что шестое ликвидировалось путём загрузки в память нужной коллекции. А все эти ленивые загрузки при таких смехотворных данных, как у меня - это эти, как их... а, преждевременные оптимизации, во!
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38422781
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот когда надо будет действительно чего-то там лениво делать или бояться, что слишком много загрузит из БД и сервер нагнёт, тогда да, можно будет отдельное свойство для Count сделать.
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38422799
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чтобы не было расходов, можно фильтр поставить в "from wg in db.WeedGroups select wg", но у меня просто задача была как раз вытащить всё, без фильтра. Да, и у меня фигня написана была раньше в этом месте

Biogroups = db.Biogroups
.Where...

А сейчас сделал так

Biogroups = selectedWG.Biogroups
.Where...
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38422824
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320,

а че амнет галочки как загрузить?(по требованию или всегда)
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38422830
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТС тебя кто научил в конструкторе такое вытворять?
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38422871
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
handmadeFromRuТС тебя кто научил в конструкторе такое вытворять?
Да вы к словам не привязывайтесь - мы уже это обсудили. Это такой тестовый код, чтобы репозиторий не писать. Главное то, что я отметил как "СУТЬ".
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38423001
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Короче, если есть каунт, то ленивые загрузки уже не катят, а раз так, то гулять так гулять. Тем более, что там не более 20 записей в одной таблице и на каждую из них по 0-5 записей через связь. Чёжь вы сразу не сказали, что надо делать такТебе сразу намекнули, что ты пишешь плохой код.
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38423321
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAuser7320Короче, если есть каунт, то ленивые загрузки уже не катят, а раз так, то гулять так гулять. Тем более, что там не более 20 записей в одной таблице и на каждую из них по 0-5 записей через связь. Чёжь вы сразу не сказали, что надо делать такТебе сразу намекнули, что ты пишешь плохой код.
А новый лучше?
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38423350
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320skyANAпропущено...
Тебе сразу намекнули, что ты пишешь плохой код.
А новый лучше?Неа.
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38423516
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAuser7320пропущено...

А новый лучше?Неа.
А по-моему, лучше. Ведь я реализовал всё, что хотел. А репозиторий будет в следующей серии... или в следующем сезоне.
...
Рейтинг: 0 / 0
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
    #38424025
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А репозиторий тут не при чём.
Первое: твой код тупо нарушает принцип единственности ответственности...

Купи себе книжку по ООП в следующем сезоне.
...
Рейтинг: 0 / 0
74 сообщений из 74, показаны все 3 страниц
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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