使用LINQ to SQL过滤

时间:2012-01-21 09:01:34

标签: .net sql linq linq-to-sql

我有一张表格如下

ID Code  
1  9198  
2  9194  
3  91989  
4  91900  
5  918907

我现在准备好这张桌子,我想做的就是那个 就像我有一个值919898989898,从这个值我得到表中的以下结果

Result  
ID Code  
1  9198

如果我通过9198900015536​​3,那么结果应为

Result  
ID Code  
3  91989  

我希望linq中的这种查询能够匹配给定值与数据库表匹配的最大字符数。

2 个答案:

答案 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();