Фильтрация с использованием LINQ to SQL - PullRequest
0 голосов
/ 21 января 2012

У меня есть одна таблица, как показано ниже

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 to sql, который будет соответствовать максимальному символу данного значения в соответствии с таблицей базы данных.

Ответы [ 2 ]

1 голос
/ 21 января 2012
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();
1 голос
/ 21 января 2012

Предполагая, что код на самом деле является 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...