Jak używać "contains" lub "like" w dynamicznym zapytaniu linq?

Plik pomocy dołączony do dynamicznego Linq w CSharpSamples.zip Nie pokazuje żadnych przykładów użycia contains lub like.

Czy są jakieś proste obejścia? czyli gdzie (col jak @Col) nie działa.

Author: Curtis White, 2010-03-16

3 answers

Oto odpowiedź! Dynamiczny Linq obsługuje . operator,

Według docs:

" pole instancji lub właściwość instancji dostęp. Dowolne publiczne pole lub własność / align = "left" / "

Dlatego możliwe jest użycie tej składni

.Where("MyColumn.Contains(@0)", myArray)

Dzięki za wszystkie sugestie! I dzięki mi za znalezienie rozwiązania.

 61
Author: Curtis White,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-16 16:16:28

Dla mnie rozwiązaniem było outerIt .

   class User { public string Name { get; set; } }
   ...
   IQueryable<User> query = db.Users;
   ...
   query = query.Where("@0.Contains(outerIt.Name)", list);

Zauważ, że outerIt jest rodzajem słowa kluczowego wbudowanego w bibliotekę (nie musisz go modyfikować, ponieważ możesz go przeczytać w odpowiedzi tutaj). Za jej pośrednictwem można uzyskać dostęp do właściwości typu zapytania.

 11
Author: user2042930,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-05 14:34:28

W Linq2Sql istnieje bezpośrednie wsparcie dla operatora like:

db.MyTable.Where(a => SqlMethods.Like(a.Name, "%"+searchTerm+"%"))

Zobacz tutaj:

Http://msdn.microsoft.com/en-us/library/system.data.linq.sqlclient.sqlmethods_members.aspx

... ale wolę używać startsWith, endsWith i contains dla większości zastosowań.

 4
Author: spender,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-16 15:34:34