2015-10-16 104 views
2

我在Excel中有一個數據,我寫了一個方法來返回數據,但我不知道如何將它們返回到列表中。這裏是我的方法:從Excel中返回數據列表

public List<MyJoin> Excel(string sort, string sortDir, int rowsPerPage, int page, out int count, out string sortCriteria) { 

     count = 0; 
     sortCriteria = ""; 
     var book = new ExcelQueryFactory("/App_Data/Northwind.xsl"); 
     var result = from x in book.Worksheet("Orders") 
        select new 
        { 
         OrderID = x["OrderID"], 
         OrderDate = x["OrderDate"], 
         ShipCountry = x["ShipCountry"], 
         CompanyName = x["CustomerID"], 
         ContactName = x["CustomerID"], 
         EmployeeName = x["EmployeeID"], 
        }; 

     var result2 = result.ToList() ; 

     return result2; 

     //return new List<MyJoin>(); 
    } 

這裏是我的課:

public class MyJoin { 
    public int OrderID { get; set; } 
    public DateTime OrderDate { get; set; } 
    public string ShipCountry { get; set; } 
    public string CompanyName { get; set; } 
    public string ContactName { get; set; } 
    public string EmployeeName { get; set; } 
} 

RESULT2不能返回LINQ,我不知道如何解決它。

+1

這是一個錯誤?你應該使用'選擇新的MyJoin'而不是'select new'。 – Dennis

+0

是的抱歉是新連接 –

回答

2

Row[columnName]回報Cell對象。而且您不能將單元格對象分配給整數/字符串/日期時間字段。您只需要使用Cast<T>方法Cell以及適當的類型參數:

var result = from r in book.Worksheet("Orders") 
      select new MyJoin 
      { 
       OrderID = r["OrderID"].Cast<int>(), 
       OrderDate = r["OrderDate"].Cast<DateTime>(), 
       ShipCountry = r["ShipCountry"].Cast<string>(), 
       CompanyName = r["CustomerID"].Cast<string>(), 
       ContactName = r["CustomerID"].Cast<string>(), 
       EmployeeName = r["EmployeeID"].Cast<string>() 
      }; 
1

基於您的評論,您可以直接在列映射到類(只要它們都具有相同的名稱)的屬性,像這樣: -

List<MyJoin> result = (from b in book.Worksheet<MyJoin>("Orders") 
         select b).ToList(); 

他們的方式,你正在做它即如果您沒有課程地圖,則需要x["OrderID"]x["OrderID"]返回的LINQ到Excel rowobject,你將不得不投這樣的: -

x["OrderID"].Cast<int> 
+0

我有同樣的...這是一個錯字 –

+0

它不接受OrderID = x [「OrderID」],OrderDate = x [「OrderDate」],因爲它不能將Linqtoexcel類型轉換爲int –

+0

@BesaNeziri - 請檢查我的編輯,你可以直接將excel列映射到你的班級。只使用第一個查詢。 –