具有属性优先级的sql查询
你好 想象一下我有一张这样的桌子具有属性优先级的sql查询,sql,linq-to-sql,Sql,Linq To Sql,你好 想象一下我有一张这样的桌子 Id | Name | City 1 | Tom york | xx 2 | Jim york | xy 3 | tony | new York 4 | Sam york | xz 我想搜索名称为“%york%”或城市名称为“%york%”的记录 但是我想给name更多的优先权,所以我的结果应该是: Id | Name | City 1 | Tom york | xx 2 | Jim york
Id | Name | City
1 | Tom york | xx
2 | Jim york | xy
3 | tony | new York
4 | Sam york | xz
我想搜索名称为“%york%”或城市名称为“%york%”的记录
但是我想给name更多的优先权,所以我的结果应该是:
Id | Name | City
1 | Tom york | xx
2 | Jim york | xy
4 | Sam york | xz
3 | tony | new York
也就是说,首先是名称为“%york%”的记录,然后是城市为“%york%”的记录
构建此查询的最佳方法是什么?我可以在一个查询中完成吗?
用sql或linq对sql的回答会很好
tks我想你所说的“但是我想给名字更多的优先权”是指你想先得到在
名字中有“a”
的实体,然后是其他实体(在城市中有“a”
)。相应的Linq到SQL查询将是:
Entities
.Where(e => e.Name.Contains("a") || e.City.Contains("a"))
.OrderByDescending(e => e.Name.Contains("a"));
SELECT Id, Name, City
FROM cities
WHERE Name LIKE 'b%'
OR City LIKE 'b%'
ORDER BY
Name LIKE 'b%' DESC
Dan Dumitru解决方案的SQL版本为:
Entities
.Where(e => e.Name.Contains("a") || e.City.Contains("a"))
.OrderByDescending(e => e.Name.Contains("a"));
SELECT Id, Name, City
FROM cities
WHERE Name LIKE 'b%'
OR City LIKE 'b%'
ORDER BY
Name LIKE 'b%' DESC
使用一些示例数据:
Id | Name | City
1 | aa | bb
2 | bb | aa
这使得:
Id Name City
2 bb aa
1 aa bb
鉴于
SELECT Id, Name, City
FROM cities
WHERE Name LIKE 'b%'
OR City LIKE 'b%'
ORDER BY
Name, City
给出了不正确的:
Id Name City
1 aa bb
2 bb aa
这是因为在第一个示例中,我们按照匹配的字段进行排序,但在第二个示例中,我们按照字段值进行排序。您需要使用的搜索字符串是“%a%”,还是可以使用不同的字母或多个字符进行匹配?是的,这只是一个示例,实际上,表中会有真实的名称或城市。tks dan,只有一件事,添加了按顺序递减,但这似乎起到了作用,tks@martin-你是对的,我纠正了,它应该是OrderByDescending而不是OrderBy。