При необходимости перейдите к «конкретному вопросу». Немного фона:
Сценарий: у меня есть набор продуктов с фильтром "детализации" (объект запроса), заполненным DDL. Каждый прогрессивный выбор DDL будет дополнительно ограничивать список продуктов, а также то, какие параметры остаются для DDL. Например, выбор молотка из инструментов ограничивает размеры продукта, показывая только размеры молотка.
Текущая настройка: я создал объект запроса, отправил его в репозиторий и передал каждый параметр в "табличную функцию" SQL, где нулевые значения означают "получить все продукты".
Я считаю это хорошей попыткой, но далеко не приемлемой для DDD. Я хочу избежать какого-либо «программирования» на SQL, надеюсь, все сделаю с репозиторием. Комментарии по этой теме приветствуются.
Конкретный вопрос:
Как мне переписать этот запрос как Динамический запрос? Ссылка на что-то вроде 101 Linq Examples была бы прекрасной, но с область динамического запроса. Я действительно хочу передать этому методу поле в кавычках "", для которого я хочу список опций и сколько продуктов имеют эту опцию.
from p in db.Products
group p by p.ProductSize into g
select new Category {
PropertyType = g.Key,
Count = g.Count() }
Каждый вариант DDL будет иметь «Выбор (21)», где (21) — это количество продуктов, которые имеют этот атрибут. После выбора параметра все остальные оставшиеся DDL будут обновлены с учетом оставшихся параметров и счетчиков.
Изменить: Дополнительные примечания:
.OrderBy("it.City") // "it" refers to the entire record
.GroupBy("City", "new(City)") // This produces a unique list of City
.Select("it.Count()") //This gives a list of counts... getting closer
.Select("key") // Selects a list of unique City
.Select("new (key, count() as string)") // +1 to me LOL. key is a row of group
.GroupBy("new (City, Manufacturer)", "City") // New = list of fields to group by
.GroupBy("City", "new (Manufacturer, Size)") // Second parameter is a projection
Product
.Where("ProductType == @0", "Maps")
.GroupBy("new(City)", "new ( null as string)")// Projection not available later?
.Select("new (key.City, it.count() as string)")// GroupBy new makes key an object
Product
.Where("ProductType == @0", "Maps")
.GroupBy("new(City)", "new ( null as string)")// Projection not available later?
.Select("new (key.City, it as object)")// the it object is the result of GroupBy
var a = Product
.Where("ProductType == @0", "Maps")
.GroupBy("@0", "it", "City") // This fails to group Product at all
.Select("new ( Key, it as Product )"); // "it" is property cast though
На данный момент я узнал, что LinqPad — это фантастика, но я все еще ищу ответ. В конце концов, я думаю, возобладают совершенно случайные исследования, подобные этому. РЖУ НЕ МОГУ.
Изменить:
У Джона Скита была фантастическая идея: использовать то, что мне нужно, как IGrouping<string, Product>
. Спасибо Джону Скит! После приведения объекта вы можете перечислить наборы и передать результаты в отдельный список.