在linq中选择没有分组的新对象?

时间:2017-03-08 20:58:36

标签: c# sql .net linq

我正在尝试编写一个查询来收集作业中的作业编号,开始日期,客户名称,型号和完成日期。为了获得这些信息,我查看了3个不同的表,使用连接将它们组合在一起。以下是三个表格:

舞台 - (每个作业在制作期间完成)

订购 - (这是我得到客户姓名的地方)

JOBS(开始日期,完成日期,工号,型号)

所以大部分信息来自JOBS表。但是我正在通过Job Number(JobNum)加入ORDER表来获取客户的名字。这是查询的样子。在我尝试将其转换为我的一个ViewModel之前,我在SQL中创建了它:

var CompletedTrucksQuery = 
  (from FA in context.JOBS
    join ORD        in context.ORDER    on FA.ORGANIZATION_ID   equals ORD.ORGANIZATION_ID
    where FA.ORDER_NUMBER   == ORD.ORDER_NUMBER
    join StageF     in context.STAGE on FA.JobNum      equals StageF.JobNum
    where StageF.StageID   == 325
    join TruckComp  in context.STAGE on FA.JobNum      equals TruckComp.JobNum
    where TruckComp.StageID == 327
    join INSP       in context.STAGE on FA.JobNum      equals INSP.JobNum
    where INSP.StageID       == 487
    orderby StageF.CompDate descending, FA.JobNum ascending
    select new {FA.JobNum, FA.StartDate, ORD.CUSTOMER_NAME, FA.MODEL_NAME, StageF.CompDate});

此时,我想要选择

工作号码(来自JOBS),

开始日期,(来自JOBS),

客户名称(来自ORDER),

产品模型(来自JOBS),

以及在StageF中完成的日期(来自STAGE)

你可以在我的select语句中看到

。我有一个对象来持有这些名为CompJob的东西,并试图做一个'分组'并选择一个新的CompJob并设置属性,但我似乎无法正确分组并获得所有'访问'我要设置的属性。这是我正在谈论的内容的摘录:

 group new {FA.JobNum, O = ORD} by StageF into grp
                                        select new CompletedTruck
                                        {
                                            JobNum = grp.Key.JobNum,
                                            StartDate = grp. //???
                                        }

你可以告诉我停了下来,因为出于某种原因我找不到开始日期。我知道这与我的分组有关。一般来说,我对linq和数据库都很陌生。

我的问题:我可以选择这些感兴趣的列到我的

的最佳方式是什么?
ObservableCollection<CompJob> CompJobList;

这样我可以在视图中的滚动查看器中使用它吗?

1 个答案:

答案 0 :(得分:0)

感谢大家帮助我。我解决了这个问题,这就是我所做的。我按照Gert Arnold的建议选择了一个新的CompJob对象。这会将查询的每一行设置为一个新对象:

select new CompJob {JobNum = FA.JobNum, StartDate = FA.StartDate, Customer = ORD.CUSTOMER_NAME,.....}

然后说

).ToList();

在查询结束时。然后我将ObservableCollection设置为我的查询返回的列表:

CompJobList = CompletedTrucksQuery ;

再次感谢您帮助我;我知道我对这一切都是新手!