Sql到Linq就像语法一样

时间:2014-04-03 18:51:20

标签: c# sql-server linq syntax

如何在表SomeTable中用C#编写linq查询,其中MyCol包含列表中的所有单词?有没有办法轻松为此写一个Like语句?

我在互联网上搜索了我的问题的答案,但是找不到合适的东西。 在Linq中,有containsstartsWithendsWith方法。如果我有一个SQL语句,这些确实很有帮助:

select * from SomeTable where Col_1 like '%cat' or Col_2 like 'dog%' or Col_3 like     '%Random%'

但是。我所拥有的是这样的陈述:

declare @Wild_Name varchar(500) = 'my cat likes dogs'
set @Wild_Name='%'+REPLACE(@Wild_Name,' ','%')

这实际上会导致@Wild_Name等于%my%cat%likes%dogs,现在我在这句话中按顺序搜索这些单词中的每一个:

select * from SomeTable where MyCol like @WildName 

此查询可以提取的结果是That's my cat. He really likes black dogs 我是以错误的方式解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

这绝对是可能的,尽管LINQ中没有“赞”。

这样的事情可以解决问题:

string wild_name = "my cat likes dogs";
string test_string = "That's my cat. He really likes black dogs";

bool match = wild_name.Split(' ').All( w => test_string.Split(' ').Contains(w));

pre-splitting test_string可能会提升性能(因为你只拆分一次)。此外,这假设所有单词都以空格分隔。

确保它们按正确顺序排列:

string wild_name = "my cat likes dogs";
string test_string = "That's my cat. He really likes black dogs";

string[] wildStrings = wild_name.Split(' ');
int lastFoundIndex = 0;
bool success = true;
for (int i = 0; i < wildStrings.Length; i++)
{
   if (test_string.Split(' ').Contains(wildStrings[i])
   {
      int findIndex = test_string.Split(' ').IndexOf(wildStrings[i]);
      if (findIndex < lastFoundIndex)
      {
         success = false;
         break;
      }
   }
   else
   {
       success = false;
       break;
   }
}

return success;

我无法想出一种“纯粹的”LINQ方式,但也许它可以帮助你提出一些想法!

让我知道我是否可以澄清任何事情!