2015-10-13 30 views
0

返回連接語句我想結果3返回到主方法如何在LINQ

var result = (from od in orders 
     join em in employees on od.EmployeeID equals em.EmployeeID 
     join ct in customers on od.CustomerID equals ct.CustomerID 
     //orderby em.EmployeeID 
     select new 
     { 
      od.OrderID, 
      od.ShipCountry, 
      ct.CompanyName, 
      ct.ContactName, 
      FullName = em.FirstName + ' '+ em.LastName, 
     }); 


var newOrders = result.OrderBy("OrderID DESC"); 

var result3 = newOrders 
    .ToList() 
    .Skip(rowsPerPage * (page-1)) 
    .Take(rowsPerPage); 

return result3; 
} 

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; } 
} 

我不知道如何將它返回一個簡單的

return result3; 

不做的伎倆,我得到一個錯誤

不能隱式類型轉換 System.Collections.Generic.List<AnonymousType#1>System.Collections.Generic.List<UserQuery.MyJoin>

+0

是'result.OrderBy( 「訂單ID DESC」);'有效?這種方法的簽名是什麼? Dup of http://stackoverflow.com/questions/534690/return-anonymous-type-results。 – qxg

+1

你需要顯示你的班級UserQuery.MyJoin –

回答

4

這不是在這裏,因爲工作:

select new 
{ 
    od.OrderID, 
    od.ShipCountry, 
    ct.CompanyName, 
    ct.ContactName, 
    FullName = em.FirstName + ' '+ em.LastName, 
} 

你正在創造新的類型 - > AnonymouseType,這是不是MyJoin類型,你期待你的函數返回。簡單使用:

select new UserQuery.MyJoin 
{ 
    OrderID = od.OrderID, 
    ... 
} 

當然你需要填寫從MyJoin類的字段。

+0

我編輯了我的帖子,現在它顯示我創建的MyJoin類。你能告訴我如何使用這個類來返回結果3' – user3521029

+0

@ user3521029填充它就像它在我的答案中,做到你需要的所有領域。它會像你的問題一樣工作,但將屬性名稱放在值的右側。 – wudzik

+0

我認爲你仍然需要將它轉換爲List'return result3.ToList();' –

0

您不能從函數調用中返回匿名類型。

你必須明確定義您希望無論如何()不需要.ToList()類型,然後

var result = (from od in orders 
    join em in employees on od.EmployeeID equals em.EmployeeID 
    join ct in customers on od.CustomerID equals ct.CustomerID 
    //orderby em.EmployeeID 
    select new UserQuery.MyJoin 
    { 
     od.OrderID, 
     od.ShipCountry, 
     ct.CompanyName, 
     ct.ContactName, 
     FullName = em.FirstName + ' '+ em.LastName, 
    }); 


var newOrders = result.OrderBy("OrderID DESC"); 

var result3 = newOrders 
.Skip(rowsPerPage * (page-1)) 
.Take(rowsPerPage); 
.ToList() 

return result3; 

請注意,您不需要兌現的結果,如果這是LINQ到對象,或如果DbContext對調用者可用。

+0

我編輯了我的帖子,現在它顯示了我創建的MyJoin類。你能告訴我如何使用這個類來返回結果3。 – user3521029

+0

使用您的整個示例進行更新。請注意,我把.ToList()最後。創建列表*然後*跳過記錄遠沒有效率。 –

+0

現在我收到以下錯誤'無效的初始化成員聲明符'。我認爲這不是正確初始化MyJoin? – user3521029

0

指定型 -

在你的情況

IQueryable<UserQuery.MyJoin> result = (from od in orders 
    join em in employees on od.EmployeeID equals em.EmployeeID 
    join ct in customers on od.CustomerID equals ct.CustomerID 
    //orderby em.EmployeeID 
    select new UserQuery.MyJoin 
    { 
     od.OrderID, 
     od.ShipCountry, 
     ct.CompanyName, 
     ct.ContactName, 
     FullName = em.FirstName + ' '+ em.LastName, 
    }); 
+0

我得到以下錯誤:無法初始化集合初始值設定項'UserQuery.MyJoin',因爲它沒有實現'System.Collections。 IEnumerable'' – user3521029