【问题标题】:Selecting a new object without grouping in linq?选择一个新对象而不在linq中分组?
【发布时间】: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 中吗?非常感谢您迄今为止的帮助!
  • 这是连接与推荐使用导航属性的问题。我看不到关系的多样性。我认为您应该至少将连接更改为TruckCompINSP 以导航属性,并在where 语句中使用它们。

标签: c# sql .net linq


【解决方案1】:

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

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

然后说

).ToList();

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

CompJobList = CompletedTrucksQuery ;

再次感谢您帮助我;我知道我对这一切都不熟悉!

【讨论】:

    猜你喜欢
    • 2010-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多