我对Linq速记IN子句感到困惑

pkwftd7m  于 2023-06-03  发布在  其他
关注(0)|答案(1)|浏览(427)

我已经搜索并找到了许多几乎可以理解的答案,但要么是我完全疯了,要么就是它们不适合我的LINQ速记语法。我看了所有“类似重复的问题”。我也用了Google。也许我只是不知道该怎么问
我的代码现在只返回3个城市。我的简写适用于CityID == 1,但我不知道如何引用我插入的3个不同城市的数组:1,2,3。如果我使用CityID==1,则不会很好地扩展||城市ID ==2|| CityID==3语法,未来计划再增加10-100个城市。

public IList<Models.Cities> Cities { get;set; }
    
        public async Task OnGetAsync()
        {
            Cities = (IList<Models.Cities>)await _context.tblCities.ToListAsync();
            
            var citylist = new int[] { 1, 2, 4 };

            Cities = Cities.Where(x => x.CityID==1).ToList();
    
        }

**大编辑/答案:**Svyatoslav Danyliv的解决方案工作,这里是我如何使用它.我可以把各种各样的计算或标准堆叠起来,一次构建一个块,而不是一个巨大的查询,即“工作或不工作”。容易取出或添加我放在一起的小块。很多时候,这些Lambda表达式从发送到OnGetAsync()的内容中获取值。

public async Task OnGetAsync(string blah, int blahblah, int yadayada) 
{
     var citylist = new int[] { 1, 2, 4 };
     var query = _context.tblCities.AsQueryable();
    
        query = query.Where(c => citylist.Contains(c.CityID));
         
        //SOME CALCULATIONS HERE
        query = query.Where(c => c.xxx == blah);
        
       //SOME CALCULATIONS HERE       
        query = query.Where(c => c.yyyy <= blahblah);
        //ADD MORE  HERE
       query = query.Where(c => c.ooo= yadayada);   
 
        //AND FINALLY OPEN THE RAZOR PAGE
        Cities = await query.ToListAsync();
}

这会增加开销吗?不确定,你告诉我。但是当涉及到规模时,我可以把所有不同的计算和标准放在一个巨大的查询中。当然,我可能会问Svyatoslav Danyliv非常感谢!

tgabmvqs

tgabmvqs1#

过滤应该在使用Contains具体化之前完成。

public async Task OnGetAsync()
{
    var citylist = new int[] { 1, 2, 4 };
    var query = _context.tblCities.AsQueryable();

    if (citylist.Length > 0) // conditional querying
        query = query.Where(c => citylist.Contains(c.CityID))

    Cities = await query.ToListAsync();
}

相关问题