【公告】網站目前停止所有的課程訂閱服務,原有學員權益不受影響,造成不便還請見諒,我們正在打造更多課程以及圖書,包含 Python 為主的課程主題,未來將會合併且擴充目前的課程內容,提供全新課程訂閱服務,感謝學員的支持。
【公告】《Entity Framework 實務精要》 絕版優惠學習活動,是針對最後一批少量書籍絕版的短期特別活動,只提供 20 個名額(剩 7 名),教學影片要在今年暑假過後才會重新開放訂閱,並沒有提供之前單獨購書的讀者,還請見諒, 如果您需要教學影片,屆時再請參與,也感謝讀者學員的支持,我們正在開發更多的教學內容,歡迎與我們一起努力。
《Entity Framework 實務精要》 絕版優惠學習活動》

LINQ to Excel:關聯式資料存取

LINQ to Excel |關聯式資料存取透過瀏覽器檢視會計損益表 

除了單一工作表的存取,透過關聯式LINQ語法,我們便能直接存取跨工作表的資料內容,這一篇利用一個範例進行相關的示範說明。

為了示範這個範例,預先準備以下的Excel檔案,其中包含兩個工作表,分別是 Products 與Categories,內容如下:


由於 Products工作表的CategoryID欄位對應至Categories工作表欄位,因此這裏要將其關聯起來,以取出每一個產品的分類名稱,結果如下:


新增一個主控台應用程式專案,於其中建立對應的類別檔案,分別命名為TProducts.cs與TCategories.cs,TProducts.cs請參考這一篇的說明,以下列舉TCategories.cs的內容:

class TCategories
{
public string CategoryID { set; get; }
public string CategoryName { set; get; } 
}

其中的屬性分別對應至Categories工作表的同名欄位內容。接下來開啟主控台檔案,Program.cs,參考前一個小節的範例,完成Excel工作表與類別結構的配置,程式如下:

var exFile = new LinqToExcel.ExcelQueryFactory("productsList_join.xlsx");          

exFile.AddMapping<TProducts>(tp => tp.ProductID, "ProductID");
exFile.AddMapping<TProducts>(tp => tp.ProductName, "ProductName");
exFile.AddMapping<TProducts>(tp => tp.CategoryID, "CategoryID");
exFile.AddMapping<TCategories>(tc => tc.CategoryID, "CategoryID");
exFile.AddMapping<TCategories>(tc => tc.CategoryName, "CategoryName");

緊接著萃取Excel檔案中工作表Products與Categries的資料,並且回傳IEnumerable介面物件,程式列舉如下:

IEnumerable<TProducts> products =
from p in exFile.Worksheet<TProducts>("Products")
select p;
IEnumerable<TCategories> categories =
from c in exFile.Worksheet<TCategories>("Categories")
select c;

接下來針對 products 與 categories 兩個物件,進行 join 關聯,語法如下:

var products_cat = from p in products
join c in categories
on p.CategoryID equals c.CategoryID
select new
{
pname = p.ProductName,
pid = p.ProductID,
pcat = c.CategoryName
};

其中的join關聯了products與categories兩個物件的資料內容,最後透過select將其中的ProductName、ProductID以及代表分類名稱的CategoryName資料取出,最後利用迴圈將其中的資料取出。

foreach (var column in products_cat)
{
Console.WriteLine(column.pcat + ":\n\t" + column.pid + "/" + column.pname);
}

迴圈的結果如上所述。

LINQ to Excel |關聯式資料存取透過瀏覽器檢視會計損益表 




沒有留言: