Динамическое "Не" по параметру в 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;
}
}