Entity Framework Querying - PullRequest
       4

Entity Framework Querying

1 голос
/ 16 февраля 2010

Я пытаюсь выяснить, как запрашивать мои объекты на основе следующей ситуации.

У меня есть две таблицы, LKCATEGORY и LKSUBCATEGORY, как вы можете себе представить, эти две таблицы связаны друг с другом. Однако, когда я прихожу на страницу, которая должна отображать только активные категории и подкатегории, как мне это сделать и получить список LKCATEGORY с LKSUBCATEGORY, включенным в ссылку с обоими этими фильтрами (isActive = true для обеих сущностей) .

Мой вызов репозитория, который возвращает список типа LKCATEGORY, выглядит следующим образом:

        //Create the Entity object
        List<LKCATEGORY> category = null;

            using (SOAE strikeOffContext = new SOAE())
            {
                //Invoke the query
                category = AdminDelegates.selectCategory.Invoke(strikeOffContext).ByActive(true).ToList();
            }

В то время как Делегат (selectCategory) выглядит так:

        public static Func<SOAE, IQueryable<LKCATEGORY>> selectCategory =
    CompiledQuery.Compile<SOAE, IQueryable<LKCATEGORY>>(
    (category) => from c in category.LKCATEGORY.Include("LKSUBCATEGORY")
                select c);

и, наконец, фильтр (ByActive)

    public static IQueryable<LKCATEGORY> ByActive(this IQueryable<LKCATEGORY> qry, bool active)
    {
        //Return the filtered IQueryable object
        return from c in qry
               where c.ACTIVE == active
               select c;

    }

Я понимаю, что у меня есть только фильтр для объекта LKCATEGORY, и, конечно, я буду фильтровать только эту таблицу. У меня вопрос, как мне отфильтровать LKCATEGORY и LKSUBCATEGORY и получить обратно список типа LKCATEGORY с включенной и отфильтрованной LKSUBCATEGORY?

Заранее спасибо, Билли

1 Ответ

1 голос
/ 17 февраля 2010

Возможно, это не ваше решение, но вы можете разделить это на два запроса и попробовать это (я полагаю, что это первая операция в LKCATEGORY в контексте):

var categories = context.LKCATEGORY.Where(c => c.ACTIVE).ToList();
var subcategories = context.LKSUBCATEGORY.Where(c => c.ACTIVE).ToList();
return categories;

Теперь посмотрите на список категорий. LKSUBCATEGORY, и вы увидите, что у вас есть только активные. Другое решение предполагает использование linq join вместо Include.

EDIT

Альтернативный способ:

context.LKCATEGORY.Where(c => c.ACTIVE).Select(c => new { Category = c, Subcategory = c.LKSUBCATEGORY.Where(sc => sc.ACTIVE) }).ToList().Select(a => a.Category);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...