2013-05-22 41 views
1

Considere這段代碼在LINQ(請注重VAR list2)字段:檢索不屬於模型

var list1 = ....... /* This linq doesnt matter. Just for clarify that it is used in the below linq */ 

var list2 = dba.OrderForm 
    .Where(q => q.OrderPriority.OrderPriorityID == orderpriorityID 
     && q.StockClass.StockClassID == stockclassID 
     && dba.AuditTrailLog.Where(log => q.OrderID == log.ObjectID) 
     .Any(log => log.ColumnInfoID == 486 
      && log.OldValue == "2" 
      && log.NewValue == "3") 
      && dba.AuditTrailLog.Where(log2 => q.OrderID == log2.ObjectID) 
      .Any(log2 => log2.ColumnInfoID == 487 
       && log2.OldValue == "1" 
       && log2.NewValue == "2") 
       && lista.Contains(q.OrderID)); 

這樣,我在記錄列表2列表屬於OrderForm模型。我需要它傳遞給叫ViewResult另一種模式:

我需要的是讓變量log2.ModificationDate屬於AuditTrailLog表,但不包括在OrderForm型號

List<ViewResult> vr = new List<ViewResult>(); 

foreach (OrderForm o in list2) 
{ 
    ViewResult r = new ViewResult(); 
    r.NumOrden = o.FormNo; 
    r.Title = o.Title; 
    r.Com = o.OrderPriority.Descr; 
    r.OClass = o.StockClass.Descr; 
    r.RodT = /* <<------ Here is where I need to assign log2.ModificationDate 

    vr.Add(r);    
} 

感謝。

回答

3

我的理解是AuditTrailLog當您獲取數據時,關係爲空。而且你想用相關數據填充它。

您必須Include此表所示:

(這意味着你是在SQL做join

var list2 = dba.OrderForm.Include("AuditTrailLog")... 

重要的是它們之間的關係。 「一對多」還是「多對一」。根據你的關係使用AuditTrailLogAuditTrailLogs

+0

感謝您的回答@JustWork。對不起,如果我沒有正確解釋。 'OrderForm-AuditTrailLog'之間的關係不爲空。我需要的是在'AuditTraiLog'表中記錄'OrderForm'表的每個記錄被修改(LINQ中的'log2.ModificationDate')時在'r.RodT'中檢索日期。 – equisde

+0

'OrderForm/AuditTrailLog'表之間的關係是1:N。我按照你的建議使用了'var list2 = dba.OrderForm.Include(「AuditTrailLog」)',但是我不能執行'r.RodT = o.AuditTrailLog.ModificationDate'既不是'r.RodT = log2.ModificationDate' – equisde

+0

如果有ModificationDate AuditTrailLog表中的值,並且在獲取數據時不會爲空,則無法執行ModificationDate。你有什麼問題。或者我明白你完全錯了。你調試了嗎?你確定AuditTrailLog不是null嗎? – JustWork