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

Bu yöntem 'System.String ToString()' yöntemini tanımıyor istisna varlıkları içinArama dizesi

LINQ atar ve bu yöntem tercüme edilemez Bir mağaza ifadesi.

Nasıl dize vs Char eşleşebilir

?

+4

onu tanıyamadı varlıkları için T-SQL, Linq için çevrilemeyen çünkü. http://stackoverflow.com/a/34061692/2946329 daha –

+0

ben 's.Surname.ToArray() [0]' Bir karakter olduğunu Thomas' cevabını anladığımız okuyun. Linq ad IEnumerables bir uzantı içerir [ '(karbonlaşmış madde) içerir '] (https://msdn.microsoft.com/en-us/library/bb352880 (v = vs.110) .aspx); kullanılabilir mi? Alternatif olarak, 'IndexOf (char)' kullanabilir ve '! = -1' için test edebilir misiniz? –

cevap

8

yerine aşağıdaki s.Surname.First() kullanabilirsiniz: Bu Linq çünkü varlıkları olur

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

Eğer kullanabileceğiniz bir List<string> ile uğraşıyoruz yana char.ToString()

ne yapacağını bilmez:

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

Char ve string ile nasıl eşleştirebilirim? s.k.paul @ –

+0

ne demek istiyorsun? –

+0

baş harfleri bir Liste ise s.Surname.First() bir karakter döndürür. Onları nasıl karşılaştırabilirim? s.k.paul @ –

2

aşağıdaki kod benim, sorunu yaşayan çözüldü

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