Bu işlev, bir kullanıcı arama girişi için bir kişi listesini döndürmek için kullanılır. Arama terimlerinin sayısı her zaman en az birdir, ancak çok olabilir.Linq 2 Sql sorgusuna belirsiz sayıda yan tümceleri dinamik olarak eklemek için doğru yol nedir?
public IList<Contact> GetContacts(string[] searchTerms)
{
using (dbDataContext db = new dbDataContext())
{
var contacts = from _contacts in db.Contacts
orderby _contacts.LastName ascending, _contacts.FirstName ascending
select _contacts;
foreach (string term in searchTerms)
{
contacts = (IOrderedQueryable<Contact>)contacts.Where(x => SqlMethods.Like(x.FirstName, "%" + term + "%")
|| SqlMethods.Like(x.MiddleName, "%" + term + "%")
|| SqlMethods.Like(x.LastName, "%" + term + "%")
|| SqlMethods.Like(x.PreferredName, "%" + term + "%"));
}
return contacts.ToList<Contact>();
}
}
Sorun, döngüdür. Oluşturulan sql doğru görünse bile (yalnızca terimlerin sayısı için doğru miktarda parantez oluşturulduğu halde) yalnızca son arama terimi kullanılır.
Örnek - iki terim ('andr', 'sm') iletirseniz, oluşturulan sql, gönderildiği gibi iki satır metni gösterir, ancak her iki blokta da param olarak yalnızca "sm" harfini kullanır.
Neyi yanlış yapıyorum? SqlMethods kullanmalı mıyım?
Oluşturulan SQL'in doğru olduğunu söylüyorsunuz, yayınlayabilir misiniz? Oluşturulan SQL'i manuel olarak çalıştırmayı denediniz mi? –
evet eğer manuel olarak çalışırsam çalışır, dizideki son 'terimi' tüm paramlar için param olarak kullanır. Garip. – IckleMonkey