1
我一直在寻找相关的LINQ问题,试图找出这一问题,但我在将我的SQL查询转换为等效的LINQ to Entities时遇到了一些麻烦版。LINQ to Entities中的左外部连接的聚合函数
select companies.CommpanyName,
job.Position,
count(offers.jobID) As Offered,
job.Openings,
job.Filled
from jobs
left outer join offers on jobs.ID = offers.JobID
join membership.dbo.individuals on jobs.UserID = individuals.ID
join membership.dbo.companies on individuals.CompanyID = companies.ID
where jobs.Hidden = 0
group by offers.JobID,
companies.CommpanyName,
job.Position,
job.Openings,
job.Filled
我已经做了左外LINQ中加入similar to this example之前,但我不知道如何将count
和group
声明与此相结合,得到期望的结果:
CompanyName Position Offered Openings Filled
1 Exmaple Co. Job X 0 2 0
2 Example Co. Job Y 4 6 3
3 Test Co. Job Z 1 1 1
的查询由于它需要利用两个独立的数据上下文这一事实进一步复杂化了。我对缺乏示例代码表示歉意,但我真的不知道如何开始,我的LINQ-fu仍然很弱。
更新:
这是我来到克雷格的帮助下解决方案,不得不使用LINQ,因为不幸的多重背景下建立的对象,JobWithOfferCounts不是一个实体对象:
IEnumerable<Job> t = context1.JobSet.Include("Offers").Include("Contacts").Where(j => j.Hidden == false);
IEnumerable <JobWithOfferCounts> r = (from j in t
join i in context2.IndividualSet on j.UserID equals i.ID
join c in context2.CompanySet on i.CompanyID equals c.ID
select new JobWithOfferCounts()
{
JobObject = j,
CompanyID = Convert.ToInt32(c.ID),
CompanyName = c.HostName,
OfferCount = j.offers.Count(o => o.Rejected == false),
FilledCount = j.offers.Count(o => o.Accepted == true),
PendingCount = j.offers.Count(o => o.Accepted == false && o.Rejected == false)
});
return r;
谢谢你刺伤它,克雷格,看起来很有希望;并提供链接到您的文章。 为了解决您的第一条评论,数据库的设计使得将工作与公司绑定的唯一方式是通过发布该工作的个人(个人数据有时也会在应用中的特定情况下显示)。至于小组,你对错误的报价绝对正确.JobID – 2010-02-12 20:54:04
哦,好的;然后,我将更新个人的查询。 – 2010-02-12 21:29:12
如果我有一个(非理想)情况,即个人处于不同的数据上下文中,是否还有一种方法可以在不使用连接的情况下执行此操作? – 2010-02-18 16:23:18