Linq不会处理真正的查询 [英] Linq does't process true query

查看:75
本文介绍了Linq不会处理真正的查询的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

大家好,

我有一个方法,你可以看到,但它无法正常工作,因为这种风格返回0项。

我不确定但是与这段代码where子句可以是这样的(我给出一些示例参数)



Hi guys,
I have a method like as you can see but it does not work correctly because this style return 0 items.
I am not sure but with this code where clause can be like this(I give some example parameter)

where  (Budget Between 130000 and 159999 or Budget Between 160000 and 20000) and  (SanzimanTipi ='xxx' and SanzimanTipi ='xxx') and (YakitTuru ='xxx')





但是我ahave转换成这样的





but I ahave to Convert like this

where  (Budget Between 130000 and 159999 or Budget Between 160000 and 20000) and  (SanzimanTipi ='Otomatik' or SanzimanTipi ='Düz Vites') and (YakitTuru ='Dizel')





请给我一些回答





Please give me some answer

public List<CarEntity> GetSearchByKCriteria(int cityId, List<string> fuelType, List<string> gearType, List<string> budget,
          List<string> caroser, List<string> enginePower)
      {
          Expression<Func<Car, bool>> query = null;
          Expression<Func<Car, bool>> combine = null;

          foreach (var bud in budget)
          {
              if (budget.Count >= 1)
              {
                  if (bud == "1")
                  {
                      if (budget.Count > 1)
                      {
                          query = car => car.Budget >= 20000 && car.Budget <= 34999;
                      }
                      else
                      {
                          query = car => car.Budget >= 20000 && car.Budget <= 34999;
                      }

                  }
                  else if (bud == "2")
                  {

                      if (query != null)
                      {
                          combine = car => (car.Budget >= 35000 && car.Budget <= 49999);
                          query = query.Or(combine);

                      }
                      else
                      {
                          query = car => car.Budget >= 35000 && car.Budget <= 49999;

                      }
                  }
              }
          }
          foreach (var caros in caroser)
          {
              if (caros != "-1" && !string.IsNullOrEmpty(caros))
              {
                  if (query != null)
                  {
                      if (query.Expand().ToString().ToLower().Contains("karoser"))
                      {
                          combine = car => (car.Karoser == caros);
                          query = query.And(combine);

                      }
                      else
                      {
                          combine = car => car.Karoser == caros;
                          query = query.And(combine);

                      }

                  }
                  else
                  {
                      query = car => car.Karoser == caros;
                  }
              }
          }
          foreach (var fuel in fuelType)
          {
              if (fuel != "-1" && !string.IsNullOrEmpty(fuel))
              {
                  if (query != null)
                  {
                      if (query.Expand().ToString().ToLower().Contains("yakituru"))
                      {
                          combine = car => (car.YakitTuru==fuel);
                          query = query.Or(combine);

                      }
                      else
                      {
                          combine = car => car.YakitTuru == fuel;
                          query = query.And(combine);

                      }

                  }
                  else
                  {
                      query = car => car.YakitTuru == fuel;
                  }
              }
          }
          foreach (var gear in gearType)
          {
              if (gear!="-1"&& !string.IsNullOrEmpty(gear))
              {
                  if (query != null)
                  {
                      if (query.Expand().ToString().ToLower().Contains("sanzimantipi"))
                      {
                          combine = car => (car.SanzimanTipi == gear);
                          query = query.Or(combine);

                      }
                      else
                      {
                          combine = car => car.SanzimanTipi == gear;
                          query = query.And(combine);

                      }

                  }
                  else
                  {
                      query = car => car.SanzimanTipi == gear;
                  }
              }
          }
          foreach (var engine in enginePower)
          {
              if (enginePower.Count >= 1)
              {
                  if (engine == "1")
                  {
                      if (query != null)
                      {
                          if (query.Expand().ToString().ToLower().Contains("silindirhacmi"))
                          {
                              combine = car => (car.SilindirHacmi >= 0 && car.SilindirHacmi <= 1600);
                              query = query.Or(combine);

                          }
                          else
                          {
                              combine = car => (car.SilindirHacmi >= 0 && car.SilindirHacmi <= 1600);
                              query = query.And(combine);

                          }

                      }
                      else
                      {
                          query = car => car.SilindirHacmi >= 0 && car.SilindirHacmi <= 1600;
                      }
                  }

                  if (engine == "3")
                  {
                      if (query != null)
                      {
                          if (query.Expand().ToString().ToLower().Contains("silindirhacmi"))
                          {
                              combine = car => (car.SilindirHacmi >= 1601 && car.SilindirHacmi <= 1800);
                              query = query.Or(combine);

                          }
                          else
                          {
                              combine = car => (car.SilindirHacmi >= 1601 && car.SilindirHacmi <= 1800);
                              query = query.And(combine);

                          }

                      }
                      else
                      {
                          query = car => car.SilindirHacmi >= 1601 && car.SilindirHacmi <= 1800;
                      }
                  }

          }

          using (var context = DataContextFactory.CreateContext())
          {

              var result = (from fkCar in context.Car.Where(query)
                            join pkCarBrand in context.CarBrand on fkCar.Marka equals pkCarBrand.ID
                            where fkCar.IsActive == true

                            select new
                            {
                                entity = fkCar,
                                joinEntity = pkCarBrand
                            });
              List<CarEntity> theCarList = new List<CarEntity>();
              foreach (var item in result)
              {
                  CarEntity theEntity = Mapper.Map(item.entity);
                  theEntity.CarBrand = Mapper.Map(item.joinEntity);
                  theCarList.Add(theEntity);

              }
              return theCarList;
          }
      }

推荐答案

这篇关于Linq不会处理真正的查询的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆