2016-12-20 32 views
6
if (!string.IsNullOrEmpty(Queries["SurnameInitial"])) 
{ 
    var initials = Queries["SurnameInitial"].Split(',').ToList(); 
     filter.And(s => initials.Contains(s.Surname.ToArray()[0].ToString())); 
} 

to zgłasza wyjątek,wyszukiwania ciąg w tablicy ciągu w wyrażeniu LINQ

LINQ podmioty nie rozpoznaje metoda "system.string ToString() sposobu, a sposób ten nie może być w języku wyrażenie sklepu.

Jak mogę dopasować char vs string?

+4

Ponieważ nie można go przetłumaczyć na T-SQL, Linq do Entities nie mógł go rozpoznać. Przeczytaj więcej http://stackoverflow.com/a/34061692/2946329 –

+0

Rozumiem z odpowiedzi Thomasa, że ​​'s.Sunkcja.ToArray() [0]' jest char. Przestrzeń nazw Linq zawiera rozszerzenie na IEnumerables ['Zawiera (char)'] (https://msdn.microsoft.com/en-us/library/bb352880 (v = vs.110) .aspx); czy to jest użyteczne? Alternatywnie, czy mógłbyś użyć 'IndexOf (char)' i przetestować dla '! = -1'? –

Odpowiedz

8

Można użyć następującego s.Surname.First() zamiast:

if (!string.IsNullOrEmpty(Queries["SurnameInitial"])) 
{ 
    var initials = Queries["SurnameInitial"].Split(','); 
     filter.And(s => initials.Contains(s.Surname.First())); 
} 

Dzieje się tak dlatego, że Linq do podmiotów nie wie, co zrobić z char.ToString()

Ponieważ masz do czynienia z List<string> można użyć:

filter.And(s => initials.Any(x => x.Contains(s.Surname.First())); 
+0

Jak mogę dopasować char i string? –

+0

@ s.k.paul co masz na myśli? –

+0

inicjały to lista , podczas gdy s.Nazwa.First() zwraca znak. Jak mogę je porównać? –

2

Poniższy kod rozwiązać mój problem-

var initials = Queries["SurnameInitial"].Split(',').ToList(); 
filter.And(s => initials.Contains(s.Surname.Substring(0, 1))); 
Powiązane problemy