2014-04-14 159 views
0

我需要從單獨的列表中提取兩個值。我有一個Order對象列表和一個Visitors對象列表,每個對象都包含按日期排列的完整對象列表。Linq連接來自兩個列表的值

我需要訪問來自OrdersList的VisitorsList和TotalOrders屬性的Visitors屬性。然後我需要將每個TotalOrders與訪客分開以獲得第三個值(轉化率)。最後,我想將每個conversionRate值添加到List TotalConversions。

我想寫一個Linq查詢,從各自的訪問者和TotalOrders,但我不知道如何做到這一點。

List<GAVisitorsModel> VisitorsList = GetGAStatisticsReport(model); 
     List<GC_OrdersModel> OrdersList = GetOrderReport(model); 
     List<GC_ConversionRateModel> TotalConversions = new List<GC_ConversionRateModel>(); 
     foreach (var order in OrdersList) 
     { 
      string _date = order.Date; 

      var Conversions = VisitorsList.Join(OrdersList, x => x.Visitors, y => y.TotalOrders, (x, y) => new { X = x, Y = y }); 


      foreach (var c in Conversions) 
      { 

       //-- Y/X = C 

       //int _conversion = C; 

       //-- GC_ConversionRateModel GC_Orders = new GC_ConversionRateModel(_date, _conversion) 
      } 
     }  

     return TotalConversions; 

List TotalConversions應該返回按日期轉換的列表。

這些是對象類:

GAVisitorsModel:

public class GAVisitorsModel : IGAVisitorsModel 
    { 

     public string Date { get; set; } 
     public int Visitors { get; set; } 

     public GAVisitorsModel(string _date, string _visitors) 
     { 

      Date = _date; 
      Visitors = _visitors; 

     } 

    } 

GCOrdersModel:

public class GC_OrdersModel 
    { 

     public string Date { get; set; } 
     public int TotalOrders { get; set; } 
     public int TotalProducts {get; set;} 



     public GC_OrdersModel(string _date, int _totalOrders, int _totalProducts) 
     { 
      Date = _date; 
      TotalOrders = _totalOrders; 
      TotalProducts = _totalProducts; 
     } 

    } 

GC_ConversionRateModel:

public class GC_ConversionRateModel 
{ 

    public string Date { get; set; } 
    public int ConversionRate { get; set; } 



    public GC_ConversionRateModel(string _date, int _conversionRate) 
    { 
     Date = _date; 
     ConversionRate = _conversionRate; 
    } 

} 
+0

你想加入的關鍵是什麼? –

+0

我認爲你需要爲你的每個對象提供類結構來幫助你。 – Enigmativity

+0

@Anatolii Gabuza關鍵是「OrdersList Date」,價值將是Visitors/TotalOrders。我正在使用Google Charts API,我需要X和Y軸的Date和ConversionValue。 – koffe14

回答

1

看看下面爲你工作

public List<GC_ConversionRateModel> GetConversionRate() 
    { 

     List<GAVisitorsModel> VisitorsList = GetGAStatisticsReport(model); 
     List<GC_OrdersModel> OrdersList = GetOrderReport(model); 
     List<GC_ConversionRateModel> TotalConversions = new List<GC_ConversionRateModel>(); 

     OrdersList.ForEach(o => { 
      TotalConversions.Add((from v in VisitorsList 
           where v.Date == o.Date 
           select new GC_ConversionRateModel(o.Date, o.TotalOrders/v.Visitors)).FirstOrDefault()); 

     }); 

     return TotalConversions; 
    } 

此外,在您的GAVisitorsModel似乎有是一個錯誤,當您嘗試在ctor指定字符串的一個整數Visitors = _visitors;

+0

這句話確實看起來很順利和令人印象深刻。將更多地考慮這一點。它編譯和運行,但ConversionRate是0,我雖然得到日期。關於int iv'e的字符串現在將所有值轉換爲正確的數據類型。訪問者int和TotalOrders int。它應該像int/int一樣工作,但其他東西必須成爲它的標誌。將進一步調查。謝謝! – koffe14

1

我會建議使用:

var result = from visitor in VisitorsList 
      join order in OrdersList on visitor.Date equals order.Date into orders 
      select new { 
       Visitor = visitor, 
       VisitorOrders = orders 
      }; 

假設你有「連接」遊客和順序(Date值),你必須與相應的訂單訪客列表中的某些屬性。

+0

好吧,我明白了。那麼我沒有一個身份訪問者的Id。我製作了一個Google AnalyticsAPI客戶端,可以提取按日期過濾的訪問者數量。我只創建了Date和visitor屬性以表示我從API獲得的相應值。然而,GCOrdersModel和GAVisitorsModel都包含Date屬性,我可以使用它作爲ID?最終的結果將是按日期的ConversionRate,因此它們都有Date的共同點。 – koffe14