我有一张表格如下
ID Code
1 9198
2 9194
3 91989
4 91900
5 918907
我现在准备好这张桌子,我想做的就是那个 就像我有一个值919898989898,从这个值我得到表中的以下结果
Result
ID Code
1 9198
如果我通过91989000155363,那么结果应为
Result
ID Code
3 91989
我希望linq中的这种查询能够匹配给定值与数据库表匹配的最大字符数。
答案 0 :(得分:1)
假设代码实际上是VARCHAR,您可以尝试:
var input = "919898989898";
var allMatches = from item in dbContext
where input.StartsWith(item.Code)
orderby item.Code.Length descending
select item;
var longestMatch = allMatches.FirstOrDefault();
或者使用点表示法而不是查询表达式将查询放入单个语句中:
var longestMatch = dbContext.Where(item => input.StartsWith(item.Code))
.OrderByDescending(item => item.Code.Length)
.FirstOrDefault();
现在这些查询可以逻辑 - 但您必须尝试查看它们是否已正确转换为SQL。
答案 1 :(得分:1)
var query = from item in dbContext
where item.Code == input.Substring(0, item.Code.Length)
orderby item.Code.Length descending
select item;
var longestMatch = query.FirstOrDefault();