【发布时间】:2017-03-08 20:58:36
【问题描述】:
我正在尝试编写一个查询来收集我工作中的工作的工作编号、开始日期、客户名称、型号和完成日期。为了获得这些信息,我查看了 3 个不同的表,使用连接将它们放在一起。以下是三张表:
STAGE -(每个作业在生产过程中经历的阶段)
ORDER -(这是我得到客户姓名的地方)
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)
正如您在我的选择语句中看到的那样。我确实有一个对象来保存每个称为 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;
以便我可以在滚动查看器中的视图中使用它?
【问题讨论】:
-
嗨,我猜上下文实际上是使用自定义的“风味”,由公司在我的工作中创建……不知道我什至可以给你多少信息。
-
哦,LINQ to entity 和“select new CompletedTruck”应该是“select new CompJob”,为了防止混淆,我在编辑时错过了
-
我确实有一个对象来保存这些中的每一个,称为 CompJob 那么为什么要分组呢?立即创建
CompJobs:select new CompJob { JobNum = FA.JobNum, ... }等 -
所以我就这么做了,而且效果很好。但是我的查询不会返回多行吗?这样做实际上会返回许多 CompJob 对象,然后我可以将它们放入我的 ObservableCollection
中吗?非常感谢您迄今为止的帮助! -
这是连接与推荐使用导航属性的问题。我看不到关系的多样性。我认为您应该至少将连接更改为
TruckComp和INSP以导航属性,并在where语句中使用它们。