2009-03-04 15 views
3

Temelde PROJECTS adlı bir tablodaki bir aramayı döndüren bu Linq to SQL sorgu sırasına sahibim. ve yavaş yavaş kurmak için ertelenmiş yürütmeden faydalanıyorum. Tek bir sorguda birden çok DataContexts kullanarak SQL için Linq SQL

var query = from p in objDBContext.PROJECTs 
where (p.PROVIDER_ID == cwForm.productForm) 
select p; 

query = from p in query 
where p.SubmittedDate >= cwForm.beginDateForm 
select p; 

LINQ ISDATE() veya tam metin araması desteklemediği için yardımcı fonksiyonu olarak sayıl değerlerini ve tablo değerleri döndürür birkaç SQL işlevlerini yazdı. Projects tablosuyla aynı .dbml dosyasındalar.

yüzden şimdi var:

var dateQuery = from d in objDBContext.ISDATE 
select d; 
//returns a bool 

var ftsQuery = from f in objDBContext.FullTextSearch 
select f; 
//returns a valued-table with the primary keys of hits with fulltextsearch 

Sorum şu, ben orijinal sorgu p bu yeni objDBContexts kullanırım nasıl? Ayrıca, executequery() öğesinin orijinal sorguya nasıl eşlendiğini bulmakla da ilgileniyorum. gibi

şey:

query = from p in query 
     from d in dateQuery 
     from f in ftsQuery 
where d.ISDATE(p.Field1) && f.FullContextSearch(searchString)  

    select p; 

ben mantıklı umuyoruz. Birkaç tür uyumsuz hatam var ve bir süredir googling denedim ama bir şey bulamadım. bağlam sınıfına tüm yöntemlerini tanımladığınız beri

cevap

2

, her üçü için aynı örneği kullanın: fulltextsearch boole'sini dönmez ise

var query = from p in objDBContext.Projects where 
    p.PROVIDER_ID == cwForm.productForm 
    && objDBContext.ISDATE(p.Field1) 
    && objDBContext.FullTextSearch(searchString) 
     //assuming FullTextSearch returns boolean 
    select p 

, ayrıcalıkları olan bir ifadeyi kurmak gerekir. IList'i döndürürse, objDBContext.FullTextSearch(searchString).Contains(p)

Yapabilecekleriniz, ne yapmaya çalıştığınıza bakılmaksızın veritabanında üç kez gidiş gelişe neden olabileceğini unutmayın. Sadece bu durumda SQL'inizi elden ele almak daha iyi olabilir. LINQ to SQL, zamanın SQL% 100'ünü değiştiremez ve amaçlamaz.

+0

teşekkürler Rex, bu SQL'in genel maliyeti ne olurdu? LINQ2SQL kullanarak dinamik SQL sorguları oluşturmanın basitliğini ve temizliğini gerçekten çok seviyorum. ve FullTextSearch, searchString ile eşleşen satırların dizin anahtarlarıyla değerli bir tablo döndürür. Bir Katkı burada en verimli olur mu? – stevenjmyu

+0

Bireysel maliyet yükü özellikle büyük değil sanırım. Başvurunuz hakkında daha fazla bilgi sahibi olmadan söylemek zor. Ancak, bir performans sorunu ortaya çıktığında, SQL'e gidiş-dönüşlerin sayısı her zaman bakılacak ilk şeylerden birisidir. –

İlgili konular