2010-06-22 17 views
11

LINQ'da kullanıcı tanımlı bir tablo değeri işlevine çapraz uygulamayla bir sorgu oluşturmak istiyorum.SQL cross LINQ uygula

SELECT * 
FROM MyTable mt 
CROSS APPLY MyTVF(mt.id) 

This sonrası bir için sadece bir alt sorgu için ancak geçerli bir haç hem uygulamak içeren oluşturulan sql ile sonuçlanan LINQ sorgu ve bir dış bir örnek verir: SQL aşağıdaki gibi gerçekten oldukça basit olurdu tvf. This makalesinde LINQ to SQL uygulamasının "ilişki gezinmeleri" için çapraz başvuru ve dış uygulama operatörleri oluşturacağını doğrular, ancak bu bağlamda bunun ne anlama geldiğinden emin değilim. This post, ne yapmak istediğimi açıklıyor ve yanıt, bunu yapmanın tek yolunun, SQL sorgusunu saklı bir prosedürde sarmak olduğunu ve ardından LINQ aracılığıyla sp'yi çağırdığını söylüyor. Umarım bu doğru değildir, çünkü aslında birden fazla LINQ sorgusunda bir uygulama boyunca bu şekilde kullanılabilecek bir televizyona ihtiyacım var, bu yüzden "bir sp ile sarın" benim için işe yaramaz. LINQ üzerinden yukarıdaki basit SQL deyimi gibi bir şey elde etmenin bir yolu var mı?

+0

tutmak akılda, linq ve SQL arasındaki ilişkinin fazla olmadığı, dolayısıyla her SQL komutunun linq yoluyla yorumlanamadığı düşünülür. – nothrow

cevap

15

nasıl bu konuda:

from mt in db.MyTable 
from mf in db.MyTVF (mt.id) 
select new { mt.Blah, mf.Blah } 
+0

Evet, tamamen işe yarıyor, inanamıyorum, bunu denemedim bile. Güzel teşekkürler. –

0
var query = ActivityRepository.Where(p => p.iAction > -1 && userIds.Contains(p.iSellerId)).GroupBy(c => c.iSellerId).Select(c => c.OrderByDescending(cc => cc.dBeginTime).First()).Select(a => new ActivityInfo 
     { 
      ActivityId = a.iActivityId, 
      StartTime = a.dBeginTime, 
      SellerId = a.iSellerId, 
      EndTime = a.dEndTime, 
      ActivityName = a.sName, 
     }); 

keypoint geçerli: .Select (c => c.OrderByDescending (cc => cc.dBeginTime) .İlk())

+1

Bu kod, OUTer APPLY sözdizimi – adu

+0

bilmek için ilginç olabilir. Bu günlerde EF'ye geçtim, birkaç yıl boyunca LinqToSQL'i kullanmadım. –