你好 想象我有这样的表
Id | Name | City
1 | Tom york | xx
2 | Jim york | xy
3 | tony | new York
4 | Sam york | xz
我希望搜索名称为'%york%'或像'%york%'这样的城市的记录 但是我想更优先考虑名字,所以我的结果会是这样的:
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
答案 0 :(得分:3)
select *
from (
select Id, Name, City, 1 as Rank
from MyTable
where Name like '%a%'
union all
select Id, Name, City, 2 as Rank
from MyTable
where City like '%a%'
) a
order by Rank
答案 1 :(得分:3)
我想你的意思是“但我想更优先考虑名称”是你希望首先在"a"
Name
中获取"a"
的实体,然后是其他实体(包括City
中的Entities
.Where(e => e.Name.Contains("a") || e.City.Contains("a"))
.OrderByDescending(e => e.Name.Contains("a"));
。相应的Linq-to-SQL查询将是:
{{1}}
答案 2 :(得分:3)
Dan Dumitru解决方案的SQL版本将是:
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
那是因为在第一个我们按哪个字段匹配排序,但在第二个我们按字段值排序。