Динамическое «Не» по параметру в LINQ (или любой другой код в этом отношении) - PullRequest
2 голосов
/ 18 мая 2009

Хорошо,

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

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

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 ]

11 голосов
/ 18 мая 2009

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

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;
2 голосов
/ 18 мая 2009

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

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

Джо

0 голосов
/ 18 мая 2009

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

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

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

0 голосов
/ 18 мая 2009

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

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);
0 голосов
/ 18 мая 2009

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

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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...