2014-02-26 71 views
0

以下是我的LINQ查询:LINQ子查询问题

var varResourceStatusReportDataBase = 
    (
     from content in listContent 
     join workflowInstance in listWorkflkowInstance 
     on content.Field<string>("ows_ID").Trim() 
      equals workflowInstance.Field<string>("ows_Content ID").Split(';')[0].Trim() 
     join WorkflowInstanceStep in listWorkflowInstanceStep 
     on workflowInstance.Field<string>("ows_ID") 
      equals WorkflowInstanceStep.Field<string>("ows_Workflow Instance ID").Split(';')[0] 
     select new 
     { 
     ContentName = content.Field<string>("ows_Name"), 
     WorkflowInstanceId = workflowInstance.Field<string>("ows_ID"), 
     WIName = workflowInstance.Field<string>("ows_Title"), 
     WIPlannedStartDate = workflowInstance.Field<string>("ows_Planned Start Date") ?? "", 
     WIPlannedEndDate = workflowInstance.Field<string>("ows_Planned End Date") ?? "", 
     WIActualStartDate = workflowInstance.Field<string>("ows_Actual Start Date") ?? "", 
     WIActualEndDate = workflowInstance.Field<string>("ows_Actual End Date") ?? "", 
     WIApprovalDate = workflowInstance.Field<string>("ows_Approval Date") ?? "", 
     WITaskStatus = workflowInstance.Field<string>("ows_Status").ToUpper() ?? "", 
     WIMetadataStatus = workflowInstance.Field<string>("ows_Metadata Status") ?? "", 
     WIApprover = workflowInstance.Field<string>("ows_Approver").Replace("#", "").Split(';')[1].ToUpper() ?? "", 
     WISResponsible = WorkflowInstanceStep.Field<string>("ows_Responsible").Replace("#", "").Split(';')[1].ToUpper() ?? "", 
     WISDesiredEndDate= 
      (
      from WorkflowInstanceStep1 in listWorkflowInstanceStep 
      where (WorkflowInstanceStep1.Field<string>("ows_Status") =="IN PROGRESS" || 
        WorkflowInstanceStep1.Field<string>("ows_Status") =="ASSIGNED") && 
        workflowInstance.Field<string>("ows_ID") == WorkflowInstanceStep1.Field<string>("ows_Workflow Instance ID").Split(';')[0] 
      select new {abc = WorkflowInstanceStep1.Field<string>("ows_Desired End Date")}).Take(1) 
     }).Distinct(); 

我在上面查询子查询计算WISDesiredEndDate,但是当我执行这个查询,我得到WISDesiredEndDate列没有实际价值System.Linq.Enumerable+TakeIterator>d__3a'1[<>f__AnonymousType1'1[System.String]]值我想。 请给出同样的建议。 谢谢。

回答

1

你想FirstOrDefault(),而不是Take(1)

由于从意见,你不想要一个匿名对象,以便改变选择要

select WorkflowInstanceStep1.Field<string>("ows_Desired End Date")}).FirstOrDefault() 
+0

嗨,谢谢。它为我工作,但现在“WISDesiredEndDate”列给价值{abc = 2014-02-28 00:00:00}但我只想要日期。 –

+0

我从我身边做过。谢谢。 –

+0

@PrashantKhadatkar更新了答案 –

0

您可以我们let clause更可读的代码。不过,你必须通过调用FirstOrDefault方法强制执行linq表达式。

let desiredEndDate = (from WorkflowInstanceStep1 in listWorkflowInstanceStep .... Take(1)) 
select new 
{ 
... 
    WISDesiredEndDate= desiredEndDate.FirstOrDefault() 
}