2016-03-18 46 views
0

我收到的文件列表,以及文件夾,他們居住在文件夾/文件名列表(字符串) - 只取第一個文件夾中的文件 - 可以通過Linq?

我只能處理1個,在任何階段,每個文件夾的文件 - 並且需要返回每個文件夾中的 第一個文件(這些第一文件進行處理後,他們將從列表因此被移除)

,如果我有輸入:

/Foldername1/OrderNo1.csv 
/Foldername2/OrderNo2.csv 
/Foldername1/OrderNo3.csv 
/Foldername3/OrderNo4.csv 
/Foldername2/OrderNo5.csv 

它應該返回

/FolderName1/OrderNo1.csv 
/FolderName2/OrderNo2.csv 
/FolderName3/OrderNo4.csv 



public void Main() 
{ 
RunThis(); 
} 
public class Order 
{ 
    public string OrderNo; 
    public int CustomerID; 
} 
private void RunThis() 
{ 
    List<Order> o = new List<Order>() 
    { 
     new Order { OrderNo = "/Foldername1/OrderNo1.csv",CustomerID = 1}, 
     new Order { OrderNo = "/Foldername2/OrderNo2.csv",CustomerID = 7}, 
     new Order { OrderNo = "/Foldername1/OrderNo3.csv",CustomerID = 8}, 
     new Order { OrderNo = "/Foldername3/OrderNo4.csv",CustomerID = 12}, 
     new Order { OrderNo = "/Foldername2/OrderNo5.csv",CustomerID = 8}, 
    }; 


    Console.WriteLine(o);       

} 

經由LINQ的這是可能的,或者僅是有可能通過創建 2個陣列 1.以保持經處理的文件夾 2的列表通過directory name並保持的第一文件的列表中的文件夾

Loop each filename 
    if processed folder does not contain files Directory Name 
    add foldername to processedfolders 
    add file to list of first files 
    end if 
next 

回答

2

組拿第一個文件從每個組:

List<Order> list = new List<Order>() 
{ 
    new Order { OrderNo = "/Foldername1/OrderNo1.csv",CustomerID = 1}, 
    new Order { OrderNo = "/Foldername2/OrderNo2.csv",CustomerID = 7}, 
    new Order { OrderNo = "/Foldername1/OrderNo3.csv",CustomerID = 8}, 
    new Order { OrderNo = "/Foldername3/OrderNo4.csv",CustomerID = 12}, 
    new Order { OrderNo = "/Foldername2/OrderNo5.csv",CustomerID = 8}, 
}; 

var files = list.GroupBy(o=>Path.GetDirectoryName(o.OrderNo)).Select(o=>o.First()); 
+0

輝煌,謝謝大家的幫助 –

1

在LINQ的方式來處理,這是對組記錄,如果需要的組進行排序,然後使用First方法從每個組返回單個項目。

在您的具體情況下,分組術語將是文件夾名稱,您可以使用Path.GetDirectoryName方法提取文件夾名稱。可以排序之前的分組操作來完成的,應當保持所要求的順序:

var query = 
    from ord in list 
    orderby ord.OrderNo 
    group ord.OrderNo by Path.GetDirectoryName(ord.OrderNo) into grp 
    select grp.First(); 

從這個結果記錄:

/Foldername1/OrderNo1.csv 
/Foldername2/OrderNo2.csv 
/Foldername3/OrderNo4.csv 
相關問題