开始
如何将变量组合为字符串并在LINQ查询中的where条件中使用该字符串?我试过了:
query = query.Where(p => (p.Cod + p.Year + p.Count).StartsWith("BS201412"));
我的变量如下:
-
Cod
为string
型 -
Year
为short
型 -
Count
为int
类型
我也试过这个:
query = query.Where(p => (p.Cod + SqlFunctions.StringConvert((double) p.Year)+ SqlFunctions.StringConvert((double) p.Count)).StartsWith("BS201412"));
,但由于Year
查询不工作在两个变体
你有很多选择,其中两个是:
- 使用字符串。格式-它自动将每个参数转换为字符串
- 在复杂变量 上使用ToString方法
的例子:
string cod = "BS";
short year = 14;
int count = 100;
Console.WriteLine(String.Format("{0}{1}{2}", cod, year, count));
Console.WriteLine(cod + year.ToString() + count.ToString());
两种情况下的输出是相同的:
BS14100
BS14100
你的查询行可以像这样:
query = query
.Where(p => String.Format("{0}{1}{2}", p.Cod, p.Year, p.Count)
.StartsWith("BS201412"));
因为你使用的是LINQ2SQL,一些函数不能使用(因为它们不能直接转换为SQL)。您可以尝试一种不同的方法—看起来您已经有了想要搜索BS201420
的字符串,因此您可以对字符串进行分区,将每个部分转换为相应的类型并编写一个正常的查询,如下所示:
var searchFor = "BS201420";
var cod = searchFor.Substring(0, 2);
// example - use short.TryParse in your code
var year = short.Parse(searchFor.Substring(2, 4));
// example - use int.TryParse in your code
var count = int.Parse(searchFor.Substring(4,2));
query = query.Where(p => p.Cod == cod && p.Year == year && p.Count == count);
这将找到与字符串相同的结果集,并以。