2010-10-14 48 views
0

我正在使用Linq2SQL並使用舊系統。該系統內置.Net,但沒有數據層,所以我將它轉碼,以便它有一個。我有一個LINQ查詢,看起來像這樣...如何使IQueryable <out T>與指令IQueryable一起工作?

var data = from p in db.tblPeoples 
        orderby p.strLastName,p.strFirstName 
        select new 
        { 
         guidPersonId = p.guidPersonId, 
         strFirstName = p.strFirstName, 
         strLastName = p.strLastName, 
         strRank = p.tblCodesRank.strDescription, 
         strPhone = p.strPhone, 
         strEmail = p.strEmail, 
         strOffice = p.tblOrganization.strAcronym, 
         RolesList = p.tblRoles 
        }; 

,當我檢查了var是一個IQueryable的簽名,我不知道那是什麼。在我的數據層中,我將此作爲IQueryable返回,但是當我嘗試使用數據層版本,然後在返回的數據集上執行搜索時,出現錯誤,我無法將lambda表達式轉換爲鍵入'string',因爲它不是委託類型。

該怎麼辦?我正在嘗試創建代碼重用並使用已寫入的數據層版本。數據層版本是這樣的:

public static IQueryable RetrieveAllPeople() 
{ 
      var data = from p in db.tblPeoples 
       orderby p.strLastName, p.strFirstName 
       select new 
       { 
        guidPersonId = p.guidPersonId, 
        strFirstName = p.strFirstName, 
        strLastName = p.strLastName, 
        strRank = p.tblCodesRank.strDescription, 
        strPhone = p.strPhone, 
        strEmail = p.strEmail, 
        strOffice = p.tblOrganization.strAcronym, 
        RolesList = p.tblRoles 
       }; 

    return data; 
} 
+0

你有什麼理由在你的RetrieveAllPeople()中使用匿名類嗎?另外,你的IQueryable沒有指定一個類型,你不覺得有必要獲取必要的屬性嗎? – 2010-10-14 14:18:09

+0

有人可以解釋什麼是當編譯器拋出'不能轉換lambda表達式鍵入'字符串,因爲它不是一個委託類型'是什麼意思? – 2010-10-14 14:19:23

回答

1

你的返回類型應該是IQueryable<T>,這是不一樣的IQueryable。

要做到這一點,你需要創建一個類來填充你的選擇,而不是像你一樣使用匿名類。