如何在LINQ的列表中找到最近的字符串

本文关键字:最近 字符串 列表 LINQ | 更新日期: 2023-09-27 18:01:18

如果我想找到精确匹配或下一个最接近的字符串。使用SQL,我可以做:

SELECT TOP 1 * 
FROM table 
WHERE Code >= @searchcode
ORDER BY Code

我如何使用LINQ和记录列表来实现这一点?

我希望能够做这样的事情:

var find = ListDS.Where(c => c.Code >= searchcode).First();

但是你不能那样比较字符串

注意Code是一个alpha字符串,字母、数字、符号等等。

最近的意思是,如果你有一个包含"英格兰","法国","西班牙"的列表,你搜索"法国",然后你得到"法国"。如果你搜索"德国",你会得到"西班牙"。

如何在LINQ的列表中找到最近的字符串

下面这段简单的代码可能会对你有所帮助

        List<string> ls = new List<string>();
        ls.Add("ddd");
        ls.Add("adb");
        var vv = from p in ls where p.StartsWith("a") select p;

选择所有以"a"开头的元素

如果Codeint,则可能有效:

var find = ListDS.Where(c => c.Code >= searchcode).OrderBy(c => c.Code).First();

,否则您需要将其转换为一个:

int code = int.Parse(searchcode);
var find = ListDS.Where(c => Convert.ToInt32(c.Code) >= code).OrderBy(c => Convert.ToInt32(c.Code)).First();

试试这个解决方案:

class Something
{
    public string Code;
    public Something(string code)
    {
        this.Code = code;
    }
}
class Program
{
    static void Main(string[] args)
    {
        List<Something> ListDS = new List<Something>();
        ListDS.Add(new Something("test1"));
        ListDS.Add(new Something("searchword1"));
        ListDS.Add(new Something("test2"));
        ListDS.Add(new Something("searchword2"));
        string searchcode = "searchword";
        var find = ListDS.First(x => x.Code.Contains(searchcode));
        Console.WriteLine(find.Code);
        Console.ReadKey();
    }
}

我用.Contains代替了你的>=。您也可以在First中添加动作,而不需要Where

它不会找到"最近的",只会找到包含搜索参数的第一个单词。

你可以在c#中比较字符串,它将按字母顺序使用:

var find = ListDS.Where(c => c.Code.CompareTo(searchcode) >= 0)
                 .OrderBy(c => c) // get closer one, need to order
                 .First();

参考CompareTo文档

注意,对于这个方法,"10" > "2" .