2014-10-27 2 views
-3

Мои намерения состоят в том, чтобы агрегировать результаты, а не сужать их.Как преобразовать следующие запросы linq в (Наличие), как в SQL

if (Request.QueryString["VenueType"] == null) 
    Renders = _renderContext.Renders; 
else 
{ 
    List<int> venueTypeIds = Request.QueryString["VenueType"].Split(',') 
     .Select(int.Parse).ToList(); 
    Renders = _renderContext.Renders.Where(v => venueTypeIds.Contains(v.VenueTypeId)); 
} 

// SECOND CRITERION: 
if (Request.QueryString["SearchTerm"] != null) 
    Renders = Renders.Where(r => r.Title.ToLower() 
     .Contains(Request.QueryString["SearchTerm"].ToLower())); 

// ADDITIONAL CRITERION: 
if (Request.QueryString["EventType"] != null) 
{ 
    List<int> eventTypeIds = Request.QueryString["EventType"].Split(',') 
     .Select(int.Parse).ToList(); 
    Renders = Renders.Where(w => eventTypeIds.Contains(w.EventTypeId)); 
} 

if (Request.QueryString["DisplayFormat"] != null) 
{ 
    List<int> displayFormatIds = Request.QueryString["DisplayFormat"].Split(',') 
     .Select(int.Parse).ToList(); 
    Renders = Renders.Where(w => displayFormatIds.Contains(w.DisplayFormatId)); 
} 

Строки запроса исходят из групп флажков, которые могут иметь один-много вариантов. Результаты, которые я пытаюсь вернуть, не должны сужаться после первого набора критериев, но вместо этого возвращать больше результатов.

Вопрос: Как использовать предложение where или предложение GroupBy для получения совокупности возвращенных элементов, а не для сужения возвращаемых элементов?

+0

Я голосую за этот ответ, потому что, хотя я и задал вопрос, и у меня есть ответ, который мне помог. Он может иметь небольшую синтаксическую ошибку, но это помогло мне. Другие отрицают это, и если другие считают, что это плохо, это должно быть плохо, хотя это очень помогло мне. Я не буду размещать как можно больше в Stack Overflow и вместо этого посмотрю на мои сверстники для ответов на вопросы, о которых у меня есть вопросы. Спасибо, что поставил меня на место Stack Overflow! –

ответ

-1

Если я правильно понимаю ваш вопрос вы могли бы построить свои результаты постепенно, что-то вроде этого (код уменьшенную для краткости) ...

IQueryable query = from x in Context.Stuff 
        select x; 

List<Stuff> output = List<Stuff>(); 

output = query.Where(r => r.Title).Contains("SearchTerm")).ToList(); 
output += query.Where(r => r.Title).Contains("DifferentSearchTerm")).ToList(); 

См this So post о том, как выполнить явное Группировать по в Linq, хотя по моему скромному мнению, учитывая сложность ваших критериев, это было бы довольно непростительно.

+1

@EricB Приветствую вас, ключ здесь заключается в том, чтобы сохранить исходный IQueryable неповрежденным и получить результаты и эффективно объединить их в «выходную» переменную ... и не отвлекаться на несколько педантичный элемент, который может преобладать на SO. –

+1

И heres linq with have and groupby ... euch http://stackoverflow.com/questions/18050386/linq-to-sql-having-and-group-by –