如何在LINQ中的List中找到最近的字符串?

时间:2015-07-07 10:31:06

标签: c# linq

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

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

如何使用LINQ和记录列表实现此目的。

我期待能够做到这样的事情:

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

但你无法通过那种方式比较字符串。

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

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

4 个答案:

答案 0 :(得分:1)

这是一个简单的代码可以帮助你

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

选择所有带有起始字符串的元素&#34; a&#34;

答案 1 :(得分:0)

如果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();

答案 2 :(得分:0)

试试这个解决方案:

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

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

答案 3 :(得分:0)

您可以比较C#中的字符串,它将按字母顺序使用:

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

See the CompareTo docs.

请注意,使用此方法"10" > "2"