我正在重写一个vb.net应用程序,但我不能声称对vb很好。我需要在C#中写出这个等价的东西:
Dim bigList = (From gme In dtx.gmc_message_elements
Where gme.element_key_name Like "*email" _
Or gme.element_key_name Like "*web"
Or gme.element_key_name Like "*both" _
Select gme.element_key_name Distinct).ToList()
我到目前为止:
var bigList = (from gme in dtx.gmc_message_elements
where gme.element_key_name Like "*email"
|| gme.element_key_name Like "*web"
|| gme.element_key_name Like "*both"
select gme.element_key_name).FirstOrDefault().ToList();
正如您所看到的,我不确定相似的运算符是什么。我通过几个代码转换器运行它,并且它们经常抛出错误。
答案 0 :(得分:18)
要获得最相同的功能,请确保您的C#项目引用了Microsoft.VisualBasic程序集。
然后,您可以直接使用C#中的VB.NET Like
运算符,例如
LikeOperator.LikeString(gme.element_key_name, "*web", CompareMethod.Text);
请务必加入
using Microsoft.VisualBasic.CompilerServices;
这将获得最相同的功能,但是我认为这有点像黑客。
您的其他选择是使用String.StartsWith
,String.EndsWith
,String.Contains
或Regex。
答案 1 :(得分:5)
根据您的需要使用StartsWith
或EndsWith
或Contains
string
静态方法。
答案 2 :(得分:0)
我认为Regex是最好的选择。由于Like操作支持*,?,#和[], 我认为可以使用Regex库轻松匹配复杂的模式。例如。以下行将返回true。
"aBBBa" Like "a*a"
"ajhfgZ1" Like "*Z[12]"
现在取决于您的申请。如果您只是使用它来匹配一个简单的硬编码字符串,您可以直接使用String.Contains,String,StartsWith或String.EndsWith但是对于复杂匹配使用Regex以获得最佳结果。