C# 如何使用Linq进行字符串组合和查询
如何将变量组合成字符串,并在LINQ查询中的where条件中使用该字符串?我试过这个:C# 如何使用Linq进行字符串组合和查询,c#,linq,tostring,C#,Linq,Tostring,如何将变量组合成字符串,并在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((dou
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
的原因,查询在两种变体中都不起作用。您有很多选择,其中两种是:
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"));
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);
因为您使用的是LINQ2SQL,所以无法使用某些函数(因为它们不能直接转换为SQL)。您可以尝试另一种方法-看起来您有要搜索的字符串
BS201420
,因此您可以对字符串进行分区,将每个部分转换为相应的类型,并编写一个普通查询,如下所示:
query = query
.Where(p => String.Format("{0}{1}{2}", p.Cod, p.Year, p.Count)
.StartsWith("BS201412"));
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);
这应该找到与字符串相同的结果集,并以开头。代码中的3个属性是该类中唯一的属性吗?如果是这样,您可能希望重写ToString,使其看起来像query.Where(p=>p.ToString().StartsWith(“value”))。你到底想要什么?如果Count=123或Count=12会发生什么情况?这应该是同样的吗?只是为了可读性,您可能希望使用带有
let
表达式的查询语法:query=from q in query let key=String.Format(“{0}{1}{2}”,p.Cod,p.Year,p.Count),其中key.StartsWith(“BS201412”)代码>(如果注释字段允许,也可以换行。:)我很确定这不会起作用:query=query.Where(p=>p.Stringify().StartsWith(“BS201412”)代码>这是LINQ to SQL(或实体),无论哪种情况,都不能在查询中使用自定义函数。可以创建将功能添加到实体的分部类。删除注释的示例。我也尝试过这样做:query.where(p=>String.Format(“{0}{1}{2}”,p.Cod,p.Year,p.Count).StartsWith(“BS14100”);此异常:LINQ to Entities无法识别方法“System.String Format(System.String,System.Object,System.Object,System.Object)”方法,并且无法将此方法转换为存储表达式。