2011-04-07 70 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 };