Динамическое "Не" по параметру в LINQ (или любой другой код в этом отношении)

Хорошо,

Это может быть действительно просто или даже не возможно, или у меня просто мозг замерзает:)

Вот пример того, что я пытаюсь сделать:

public void SomeMethod(bool include)
        {
            using (AccountDataContext db = AccountContextFactory.CreateContext())
            {
                if (include)
                {
                    var query = from a in db.FundingTypes where a.FundingTypeId == 1 select a;
                }
                else
                {
                    var query = from a in db.FundingTypes where a.FundingTypeId != 1 select a;
                }
            }
        }

Я хотел бы динамически изменить!= И = без необходимости писать новый запрос. Запрос, который я использую в реальной жизни, очень большой, и мне не нравится дублирование кода.

Мысли или Идеи?

Спасибо

5 ответов

Решение

Это кажется совершенно простым.

var predicate = include ? 
  (Func<int, bool>) x=>x == 1 : 
  (Func<int, bool>) x=>x != 1 ;
var query = from a in db.FundingTypes where predicate(a.FundingTypeId) select a;

Как насчет этого:

var query = 
    from a in db.FundingTypes 
    where (a.FundingTypeId == 1) == include 
    select a;

Джо

Попробуй это:

var predicate = include
    ? (Func<FundingType, bool>) f => f.FundingTypeId == 1
    : (Func<FundingType, bool>) f => f.FundingTypeId != 1
return (from a in db.FundingTypes select a).Where(predicate);

Попробуй это:

SomeMethod(bool include)
{
    using (AccountDataContext db = AccountContextFactory.CreateContext())
    {
        var query = from a in db.FundingTypes where !include ^ (a.FundingTypeId == 1) select a;
    }
}

Редактировать упрощенную логику с помощью XOR

Как насчет этого:

public void SomeMethod(bool include, Func<int, bool> query)
{
    using (AccountDataContext db = AccountContextFactory.CreateContext())
    {
         var query = from a in db.FundingTypes where query(a.FundingTypeId) select a;
    }
}
Другие вопросы по тегам