与SQL的LIKE运算符类似,有什么方法可以比较C#LINQ表达式中的字符串吗?
Is there any way to compare strings in a C# LINQ expression similar to SQL's LIKE operator?
假设我有一个字符串列表.在此列表中,我想搜索一个字符串.在SQL中,我可以这样写:
Suppose I have a string list. On this list I want to search a string. In SQL, I could write:
SELECT * FROM DischargePort WHERE PortName LIKE '%BALTIMORE%'查询要使用linq语法,而不是上面的
Instead of the above, query want a linq syntax.
using System.Text.RegularExpressions; … var regex = new Regex(sDischargePort, RegexOptions.IgnoreCase); var sPortCode = Database.DischargePorts .Where(p => regex.IsMatch(p.PortName)) .Single().PortCode;我上面的LINQ语法不起作用.我怎么了?
My above LINQ syntax does not work. What have I got wrong?
推荐答案通常使用String.StartsWith/EndsWith/Contains.例如:
var portCode = Database.DischargePorts .Where(p => p.PortName.Contains("BALTIMORE")) .Single() .PortCode;我不知道是否有一种方法可以通过LINQ to SQL执行正确的正则表达式. (请注意,它确实取决于您使用的提供程序-在LINQ to Objects中会很好;这取决于提供程序是否可以将调用转换为其本机查询格式,例如SQL.)
I don't know if there's a way of doing proper regular expressions via LINQ to SQL though. (Note that it really does depend on which provider you're using - it would be fine in LINQ to Objects; it's a matter of whether the provider can convert the call into its native query format, e.g. SQL.)
正如BitKFu所说的,当您期望一个精确的结果时应使用Single-如果不是这样的话是错误的.应根据期望的确切使用SingleOrDefault,FirstOrDefault或First的选项.
As BitKFu says, Single should be used when you expect exactly one result - when it's an error for that not to be the case. Options of SingleOrDefault, FirstOrDefault or First should be used depending on exactly what's expected.
更多推荐
LINQ中的LIKE运算子
发布评论