C# 从Excel返回数据列表

C# 从Excel返回数据列表,c#,excel,linq,linq-to-excel,C#,Excel,Linq,Linq To 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 =

我在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>();  
    }

result2无法返回LINQ,我不知道如何修复它。

根据您的评论,您可以直接将列映射到类的属性(前提是它们都具有相同的名称),如下所示:-

 List<MyJoin> result = (from b in book.Worksheet<MyJoin>("Orders")
                       select b).ToList();
x["OrderID"].Cast<int>

行[columnName]
返回
单元格
对象。并且不能将单元格对象分配给整数/字符串/日期时间字段。您只需使用带有适当类型参数的
Cell
Cast
方法:

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>()
             };
var result=来自book.Worksheet(“订单”)中的r
选择新建MyJoin
{
OrderID=r[“OrderID”].Cast(),
OrderDate=r[“OrderDate”].Cast(),
ShipCountry=r[“ShipCountry”].Cast(),
CompanyName=r[“CustomerID”].Cast(),
ContactName=r[“CustomerID”].Cast(),
EmployeeName=r[“EmployeeID”].Cast()
};

这是打字错误吗?您应该使用
select new MyJoin
而不是
select new
。是的,很抱歉是新join我有相同的…这是一个打字错误,它不接受OrderID=x[“OrderID”],OrderDate=x[“OrderDate”],因为它无法将类型Linqtoexcel转换为int@BesaNeziri-请检查我的编辑,您可以直接将excel列映射到您的类。只使用第一个查询。
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>()
             };