Справка по синтаксису C # Linq - Как я могу исключить два значения? - PullRequest
1 голос
/ 10 сентября 2009

У меня есть этот запрос linq, который работает хорошо (хотя он может быть написан лучше, пожалуйста, скажите, если вы заметили что-то)

var qry = BenefitCodes
    .Where(b => b.BenInterest != 'E' 
       && (b.BenProductLine == CoverageProductLine || b.BenProductLine == null) )
    .Select(b => b)
    .OrderBy(b => b.BenDesc);

Появилось новое требование об исключении двух BenCodes (1001, 1009), BenCodes - это просто еще один столбец в таблице SQL.

Должен ли я использовать какой-то вариант ".Contains", я должен был бы это сделать! Contains или что-то в этом роде. Кто-нибудь может указать мне правильное направление?

Спасибо, ~ ck в Сан-Диего

Ответы [ 4 ]

4 голосов
/ 10 сентября 2009

Да, один из способов справиться с этим заключается в следующем (для краткости и удобства чтения я исключаю оставшуюся часть вашего запроса):

var excludedBenCodes = new List<int>() { 1001, 1009 };
var query = BenefitCodes.Where(b => !excludedBenCodes.Contains(b.BenCodes));

Я полагаю, что это будет более читабельным и более понятным, чем альтернатива добавления подпункта b.BenCodes != 1001 && b.BenCodes != 1009 к предложению where.

2 голосов
/ 10 сентября 2009

Вы можете просто добавить еще одну строку в предложение Where и исключить каждый пункт с BenCodes 1001 или 1009.

Как это:

var qry = BenefitCodes.Where(b => b.BenInterest != 'E' && (b.BenProductLine == CoverageProductLine || b.BenProductLine == null) && b.BenCodes != 1001 && b.BenCodes != 1009 ).Select(b => b).OrderBy(b => b.BenDesc);
1 голос
/ 10 сентября 2009

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

var qry = BenefitCodes.Where(b => FitsCriteria(b)).OrderBy(b => b.BenDesc);

и добавить метод

public bool FitsCriteria(BenefitCode b)
{
return b.BenInterest != 'E' && 
   (b.BenProductLine == CoverageProductLine || b.BenProductLine == null) && 
   b.BenCodes != 1001 && 
   b.BenCodes != 1009;
}

Доброжелательность,

Dan

0 голосов
/ 10 сентября 2009
var qry = BenefitCodes
    .Where(b => b.Code != '1001' 
        && b.Code != '1009' 
        && b.BenInterest != 'E' 
        && (  b.BenProductLine == CoverageProductLine 
           || b.BenProductLine == null))
    .OrderBy(b => b.BenDesc);

Вам даже не нужен «Выбрать», когда вы не используете синтаксис LINQ. поскольку методы Where и OrderBy уже возвращают ваш IQueryable.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...