2011-09-01 38 views
0

我有包含BreadCrumbItem對象2列出:LINQ加入或加入羣組或聯盟?

public BreadcrumbItem() 
    { 
     this.Title = string.Empty; 
     this.Url = string.Empty; 
     this.BreadcrumbType = BreadcrumbType.None; 
    } 

public enum BreadcrumbType 
{ 
    /// <summary> 
    /// Used for None type. 
    /// </summary> 
    None, 

    /// <summary> 
    /// Used for Area breadcrumb. 
    /// </summary> 
    Area, 

    /// <summary> 
    /// Used for Controller breadcrumb. 
    /// </summary> 
    Controller, 

    /// <summary> 
    /// Used for Action breadcrumb. 
    /// </summary> 
    Action 
} 

我需要加入這兩個列表不過,我需要用列表2的性能覆蓋列表1的屬性(只已經BreadcrumbType指定的項目)。

因此,例如:

var List1 = new List<BreadCrumbItem>() 
List1.Add(new BreadcrumbItem(){ "List1Test1", "/home/", "Controller"}); 
List1.Add(new BreadcrumbItem(){ "List1Test2", "/view/", "Action"}); 
List1.Add(new BreadcrumbItem(){ "List1Test2", "/view/", null}); 

var List2 = new List<BreadCrumbItem>() 
List2.Add(new BreadcrumbItem(){ "List2Test1", "/test/", "Controller"}); 
List2.Add(new BreadcrumbItem(){ "List2Test2", "/test3/", null}); 
List2.Add(new BreadcrumbItem(){ "List2Test3", "/test3/", null}); 

後加入我假設有具有以下項目的列表:

List2Test1 
List1Test2 
List1Test2 
List2Test2 
List2Test3 

順序很重要。

請幫忙。 感謝

+2

這真的不清楚你試圖從示例或描述來實現的。也許你爲什麼試圖做到這一點的想法可能會有所幫助?您是否加入了某個鍵或嘗試合併這些列表(創建一個包含這兩個列表中的元素的列表)。該網址是否相關?如果不是,則將其從所有地方移除,如果是,則將其應該添加到輸出中。 – ForbesLindesay

+0

同意Tuskan360。在示例中,您沒有提供足夠的信息來確定如何從合併列表中刪除項目。 – marcind

回答

0

我結束了不使用LINQ:

  this.Items = new List<BreadcrumbItem>(); 
      foreach (var item in virtualPathData) 
      { 
       if (customBreadcrumbs != null) 
       { 
        var replaceItem = 
         customBreadcrumbs.Items.FirstOrDefault(t => t.BreadcrumbType == item.BreadcrumbType); 
        if (replaceItem != null) 
        { 
         this.Items.Add(replaceItem); 
         customBreadcrumbs.Items.Remove(replaceItem); 
         continue; 
        } 
       } 

       this.Items.Add(item);           
      } 
      if (customBreadcrumbs != null) 
      { 
       foreach (var breadcrumb in customBreadcrumbs.Items) 
       { 
        this.Items.Add(
         breadcrumb.Url.IndexOf("?") == 0 
          ? new BreadcrumbItem(
            breadcrumb.Title, 
            string.Concat(this.Items.Last().Url, breadcrumb.Url), 
            BreadcrumbType.None) 
          : breadcrumb); 
       } 

      } 
0
class Program { 
    static void Main(string[] args) { 

     var List1 = new List<BreadcrumbItem>(); 
     List1.Add(new BreadcrumbItem("List1Test1", "/home/", BreadcrumbItem.BreadcrumbType.Controller)); 
     List1.Add(new BreadcrumbItem("List1Test2", "/view/", BreadcrumbItem.BreadcrumbType.Action)); 
     List1.Add(new BreadcrumbItem("List1Test2", "/view/", BreadcrumbItem.BreadcrumbType.None)); 

     var List2 = new List<BreadcrumbItem>(); 
     List2.Add(new BreadcrumbItem("List2Test1", "/test/", BreadcrumbItem.BreadcrumbType.Controller)); 
     List2.Add(new BreadcrumbItem("List2Test2", "/test3/", BreadcrumbItem.BreadcrumbType.None)); 
     List2.Add(new BreadcrumbItem("List2Test3", "/test3/", BreadcrumbItem.BreadcrumbType.None)); 

     List<BreadcrumbItem> combined = List1.Union(List2).ToList<BreadcrumbItem>(); 
     List<BreadcrumbItem> ordered = (combined.OrderBy(a => a.orderTitle)).ToList<BreadcrumbItem>(); 

     foreach (var item in ordered) { 
      Console.WriteLine(((BreadcrumbItem)item).Title); 
     } 

     Console.ReadLine(); 
    } 

    class BreadcrumbItem { 


     public string Title; 
     public string Url; 
     public BreadcrumbType breadcrumbType; 
     public BreadcrumbItem() { 
      this.Title = string.Empty; 
      this.Url = string.Empty; 
      this.breadcrumbType = BreadcrumbType.None; 
     } 
     public BreadcrumbItem(string title, string url, BreadcrumbType type) { 
      this.Title = title; 
      this.Url = url; 
      this.breadcrumbType = type; 
     } 

     public string orderTitle { 
      get { 
       string dummy; 
       dummy = Title.Substring(Title.IndexOf("Test")); 
       dummy += Title.Substring(0,Title.IndexOf("Test")); 
       return dummy; 
      } 

     } 

     public enum BreadcrumbType { 
      /// <summary> 
      /// Used for None type. 
      /// </summary> 
      None, 

      /// <summary> 
      /// Used for Area breadcrumb. 
      /// </summary> 
      Area, 

      /// <summary> 
      /// Used for Controller breadcrumb. 
      /// </summary> 
      Controller, 

      /// <summary> 
      /// Used for Action breadcrumb. 
      /// </summary> 
      Action 
     } 
    } 
} 

我修改代碼中的位和添加orderTitle。但結果應該是正確的。