2011-04-07 62 views
1

我基本上想在Lambda EF中編寫此代碼。如何在EF中訂購兒童財產

select c.* from company c 
left join companyfeature cf 
on c.companyID = cf.companyID 
AND cf.FeatureID = 1 
order by FeatureID desc, c.Name 

我似乎無法弄清楚。
在EF他們公司& CompanyFeatures實體

克勞斯: 我從來沒有說過我沒有嘗試,我說我不能弄明白。但爲了證明我對你來說不是一個免費的裝載機;這是我的linq聲明。 (是的,我有我的FK到位)

Companies 
.OrderByDescending(c => c.CompanyFeatures.Any(f => f.FeatureID == 1)) 
.ThenBy(c => c.Name) 

的實際工作,但它產生的不敬虔的SQL語句花費6秒VS毫秒我的SQL語句的上方。所以我認爲我寫錯了。我知道有比我更聰明的人,所以我希望有人願意分享他們的知識。提前致謝。

+0

沒有理由這樣做連接,如果你有你的表格佈局適當的外鍵。而且,只要寫下來,如果你仍然有問題,就發佈你的嘗試,而不是要求人們爲你寫出整個解決方案,甚至沒有嘗試。 – 2011-04-07 03:44:09

+0

您只需要在LINQ中制定左外連接。試試這個:http://msdn.microsoft.com/en-us/library/bb397895.aspx – 2011-04-07 05:31:39

+0

如果您已經將FeatureID限制爲一個值,那麼通過FeatureID進行排序有什麼用? – JamieSee 2012-01-30 18:37:31

回答

0

試試這個(注意,這是C#,但VB頗爲相似。):

var result = 
    from Company in Companies 
    from CompanyFeature in Company.CompanyFeatures.Where(cf => cf.FeatureID == 1).DefaultIfEmpty() 
    orderby Company.Name 
    select { Company, CompanyFeature };