如果我想找到完全匹配或字符串的下一个最接近的匹配。 使用SQL,我可以这样做:
SELECT TOP 1 *
FROM table
WHERE Code >= @searchcode
ORDER BY Code
如何使用LINQ和记录列表实现此目的。
我期待能够做到这样的事情:
var find = ListDS.Where(c => c.Code >= searchcode).First();
但你无法通过那种方式比较字符串。
请注意Code
是一个字母字符串,字母,数字,符号等等。
最近的意思是,如果你有一个包含"英国","法国","西班牙"的列表,你搜索"法国"然后你得到"法国"。如果您搜索"德国"你得到"西班牙"。
答案 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)
如果Code
是int
,则可能有效:
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();
请注意,使用此方法"10" > "2"
。