【问题标题】:weird result in linq to entitylinq到实体的奇怪结果
【发布时间】:2013-10-02 14:25:39
【问题描述】:

我正在为一个可以设置区域和城市的网站制作一些过滤器,但我只想显示有产品的区域和城市,但城市部分给了我错误的结果。我首先在普通的 MySql 中进行了查询,并且效果很好:

SELECT b.city, COUNT(b.city)
FROM ads AS a 
JOIN locations AS b ON b.id = a.locations_id
JOIN areas AS c ON c.id = b.areas_id
WHERE 
a.title LIKE '% mini' OR
a.title LIKE '% mini %' OR
a.title LIKE 'mini %' AND
c.id = '7ea21f5b-5c75-11e1-8809-4061869766cd'
GROUP BY b.city

Linq 到实体:

var query = (from a in db.ads
             join b in db.locations on a.locations_id equals b.id
             join c in db.areas on b.areas_id equals c.id
             where 
             a.title.Contains(" " + searchQuery) ||
             a.title.Contains(" " + searchQuery + " ") ||
             a.title.Contains(searchQuery + " ") &&
             c.id.Equals(area)
             select new {
                 b.city
             }).OrderBy(x => x.city).GroupBy(x => x.city).ToList();

return jsonOutputString.Serialize(query);

linq to entity 查询只是返回所有城市,不关心区域过滤器

【问题讨论】:

  • 如果去掉&&这个条件?
  • 您的 SQL 查询有效,这很奇怪。我相信您需要在标题过滤周围加上括号:(a.title LIKE '% mini' OR a.title LIKE '% mini %' OR a.title LIKE 'mini %') AND

标签: c# mysql linq entity


【解决方案1】:

试试这样的

var query = (from a in db.ads
                             join b in db.locations on a.locations_id equals b.id
                             join c in db.areas on b.areas_id equals c.id
                             where 
                             (a.title.Contains(" " + searchQuery) ||
                             a.title.Contains(" " + searchQuery + " ") ||
                             a.title.Contains(searchQuery + " ")) &&
                             b.areas_id.Equals(area)
                             select new
                                        {
                                            b.city
                                        }).OrderBy(x => x.city).GroupBy(x => x.city).ToList();

【讨论】:

  • 感谢您的帮助,您能解释一下为什么 a.t​​itle 周围需要 () 吗?
  • @MikkelRefsgaard Operator precedence and associativity。如您所见,AND 的优先级高于 OR
猜你喜欢
  • 2011-08-19
  • 1970-01-01
  • 1970-01-01
  • 2013-12-13
  • 2020-05-11
  • 1970-01-01
  • 2019-01-12
  • 2016-08-14
  • 1970-01-01
相关资源
最近更新 更多