Каков самый трудный или самый недооцененный аспект LINQ? [закрытый]

Интерфейсы должны быть небольшими. Действительно мало. Если вы действительно разрушаете свои объекты, ваши интерфейсы, вероятно, содержат только несколько очень специфических методов и свойств.

Абстрактные классы - это ярлыки. Есть ли вещи, которые делят все производные от PetBase, которые вы можете кодировать один раз и делать? Если да, то пришло время для абстрактного класса.

Абстрактные классы также ограничивают. Хотя они дают вам отличный ярлык для создания дочерних объектов, любой данный объект может реализовать только один абстрактный класс. Много раз я нахожу это ограничение абстрактных классов, и именно поэтому я использую множество интерфейсов.

Абстрактные классы могут содержать несколько интерфейсов. Ваш абстрактный класс PetBase может реализовать IPet (владельцы домашних животных имеют владельца) и IDigestion (домашние животные едят или, по крайней мере, должны). Тем не менее, PetBase, вероятно, не будет внедрять IMammal, поскольку не все животные являются млекопитающими, и не все млекопитающие являются домашними животными. Вы можете добавить MammalPetBase, который расширяет PetBase и добавляет IMammal. FishBase может иметь PetBase и добавлять IFish. Исиш будет иметь ISwim и IUnderwaterBreather в качестве интерфейсов.

Да, мой пример сильно сложный для простого примера, но это часть замечательной вещи о том, как интерфейсы и абстрактные классы работают вместе.

282
задан 5 revs, 4 users 65% 27 June 2009 в 02:50
поделиться

35 ответов

Синтаксис понимания 'волшебство'. То, как делает синтаксис понимания, переводится в вызовы метода и какие вызовы метода выбраны.

, Как делает, например:

from a in b
from c in d
where a > c
select new { a, c }

переводится в вызовы метода.

1
ответ дан Pop Catalin 23 November 2019 в 01:54
поделиться

Это является, конечно, не 'самым самым твердым', но просто что-то для добавления к списку:

ThenBy() extension method

, не смотря на его реализацию я первоначально озадачен относительно того, как она работает. Все понимают очень хорошо, как запятая разделила работу полей сортировки в SQL - но на номинальной стоимости я скептически настроен, что ThenBy собирается сделать то, что я действительно хочу, чтобы это сделало. Как может он 'знать' то, чем было предыдущее поле сортировки - кажется, что это должно.

я прочь для исследования его теперь...

1
ответ дан Simon_Weaver 23 November 2019 в 01:54
поделиться

Для LINQ2SQL: Получение Вашей головы вокруг части сгенерированного SQL и записи запросов LINQ, которые переводят в хороший (быстрый) SQL. Это - часть большей проблемы знания, как сбалансировать декларативную природу запросов LINQ с реализмом, который они должны выполнить быстро в известной среде (SQL Server).

можно добраться, совершенно другой SQL генерировал запрос путем изменения крошечной крошечной вещи в коде LINQ. Может быть особенно опасным, если Вы создаете дерево выражений на основе условных операторов (т.е. добавляете дополнительные критерии фильтрации).

1
ответ дан Simon_Weaver 23 November 2019 в 01:54
поделиться

Могу поспорить, что почти один знает кое-что: вы можете использовать встроенные if в запросе linq. Примерно так:

var result = from foo in bars where (
    ((foo.baz != null) ? foo.baz : false) &&
    foo.blah == "this")
    select foo;

Я полагаю, вы также можете вставлять лямбды, хотя я не пробовал.

-1
ответ дан 23 November 2019 в 01:54
поделиться

Тот факт, что вы не можете связать IQueryable, потому что они являются вызовами методов (хотя по-прежнему ничего другого, кроме SQL-переводимых!), И что с ним практически невозможно работать вокруг этого ошеломляет и создает огромное нарушение DRY. Мне нужны мои IQueryable для ad-hoc, в которых у меня нет скомпилированных запросов (я скомпилировал запросы только для тяжелых сценариев), но в скомпилированных запросах я не могу их использовать, и вместо этого мне нужно снова писать регулярный синтаксис запросов. Теперь я делаю те же подзапросы в двух местах, нужно не забывать обновлять оба, если что-то изменится, и так далее. Кошмар.

0
ответ дан 23 November 2019 в 01:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: