我在这里有此代码。我认为这不是很有效率,我想知道是否有某种方式可以让我这样做。因此,某些条款在开始或结束时添加,而不是重复三次。我将不胜感激,如果任何人都可以给我任何意见和展示我如何能做到这一点:有没有办法推迟LINQ语句中的.WHER子句?
List<Phrase> phrases;
switch (options.PhraseTypeSelectId)
{
case 0:
phrases = await db.Phrases
.Where(w => ((w.CategoryId == options.CategorySelectId || options.CategorySelectId == null) ||
(w.ChapterId == options.ChapterSelectId || options.ChapterSelectId == null)))
.Where(w => (w.EnglishAscii >= es1 && w.EnglishAscii <= ee1) || (w.EnglishAscii >= es2 && w.EnglishAscii <= ee2))
.Where(w => (w.RomajiAscii >= rs1 && w.RomajiAscii <= re1) || (w.RomajiAscii >= rs2 && w.RomajiAscii <= ee2))
.Where(w => (options.CreatedBy == 0 || w.CreatedBy == options.CreatedBy))
.Where(w => (options.ModifiedBy == 0 || w.ModifiedBy == options.ModifiedBy))
.Where(w => (options.JLPT == 0 || w.JLPT == options.JLPT))
.AsNoTracking()
.ToListAsync();
return Ok(phrases);
case 1:
phrases = await db.Phrases
.Where(w => ((w.CategoryId == options.CategorySelectId || options.CategorySelectId == null)))
.Where(w => (w.EnglishAscii >= es1 && w.EnglishAscii <= ee1) || (w.EnglishAscii >= es2 && w.EnglishAscii <= ee2))
.Where(w => (w.RomajiAscii >= rs1 && w.RomajiAscii <= re1) || (w.RomajiAscii >= rs2 && w.RomajiAscii <= ee2))
.Where(w => (options.CreatedBy == 0 || w.CreatedBy == options.CreatedBy))
.Where(w => (options.ModifiedBy == 0 || w.ModifiedBy == options.ModifiedBy))
.Where(w => (options.JLPT == 0 || w.JLPT == options.JLPT))
.AsNoTracking()
.ToListAsync();
return Ok(phrases);
case 2:
phrases = await db.Phrases
.Where(w => ((w.ChapterId == options.ChapterSelectId || options.ChapterSelectId == null)))
.Where(w => (w.EnglishAscii >= es1 && w.EnglishAscii <= ee1) || (w.EnglishAscii >= es2 && w.EnglishAscii <= ee2))
.Where(w => (w.RomajiAscii >= rs1 && w.RomajiAscii <= re1) || (w.RomajiAscii >= rs2 && w.RomajiAscii <= ee2))
.Where(w => (options.CreatedBy == 0 || w.CreatedBy == options.CreatedBy))
.Where(w => (options.ModifiedBy == 0 || w.ModifiedBy == options.ModifiedBy))
.Where(w => (options.JLPT == 0 || w.JLPT == options.JLPT))
.AsNoTracking()
.ToListAsync();
return Ok(phrases);
}
return BadRequest();
我想包括switch语句,因为我没有试过这个,它变得非常混乱与相关的。凡条款短语类型选择ID
我不能见案例1和2 – HimBromBeere
之间的差异为什么不创建一个包含了常用的逻辑方法您的案件,并在案件本身添加案件的具体逻辑? –
您可以在'select'子句之外进行赋值'phrase = await db.Phrases'。在'select cases'中,你可以连接'where'这样的表达式,如'phrases = phrases.where()' – hellowstone