LINQ, как указать, чтобы включить элементы из списка <> - PullRequest
0 голосов
/ 01 апреля 2011

Хорошо, я пытаюсь найти все подкатегории из моей базы данных (используя формирование результатов запроса), которые принадлежат к категории, которую я предоставляю.Мой класс подкатегории включает в себя список <> категорий.

Проблема в том, что в инструкции linq g ссылается на подкатегорию (которая в конце концов содержит категории <>).Поэтому приведенный ниже оператор недопустим.

Как изменить оператор Linq для генерации правильного запроса SQL, включив в него все подкатегории, содержащие соответствующую категорию.

 public class SubCategory

    {
        public int SubCategoryId { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
        public List<Article> Articles { get; set; }
        public List<Category> Categories { get; set; }
    }

//incorrect code below:
var SubCategories = storeDB.SubCategories.Include("Categories").Single(g => g.Name == category);

Ответы [ 3 ]

1 голос
/ 01 апреля 2011

Это сработало для меня (может быть, слишком просто):

var Category = storeDB.Categories.Include("SubCategories").Single(c => c.Name == category);
return Category.SubCategories;
1 голос
/ 01 апреля 2011

Меня немного смущает, что каждая подкатегория может принадлежать более чем к одной категории - правильно ли вы установили эти отношения?

Несмотря на это, я думаю, что это, вероятно, более читабельно, если вы сначала измените выбор для работы с категориями - то есть что-то вроде:

var subCatQuery   = from cat in storeDB.Categories
                    where cat.Name == category
                    select cat.SubCategories;

, который вы можете выполнить, чтобы получить свой IEnumerable <>:

var subCategories = subCatQuery.ToList();

Я считаю, что это гораздо более читабельно / понятно.


(я также считаю, что синтаксис запроса здесь легче читать, чем свободный стиль)

0 голосов
/ 06 ноября 2015

Мой предпочтительный ответ - использовать linq join. если нет только двух наборов данных, вы можете использовать операции linq .join и .groupjoin против оператора from. это был бы мой подход.

    Dictionary<MainQuery, List<subQuery>> Query = 
    dbStore.List<MainQuery>.include("IncludeAllObjects")
    .groupjoin(db.List<SubTable>.Include("moreSubQueryTables"), 
    mainQueryA=>mainQueryA.PropToJoinOn,
    subQueryB => sunQueryB.PropToJoinOn,
    ((main, sub)=> new {main, sub})
    .ToDictionary(x=>x.main, x=>x.sub.ToList());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...