我想使用連接(...)擴展方法來建立一個基於傳遞給方法的標準的查詢。我有如下的錯誤:在加入擴展方法問題實現加入(...)擴展方法
public static IQueryable QueryItems(string param1, string param2, string param3)
{
IQueryable<tbl_Item> query = dataMap.tbl_ItemMap;
//Join is giving me the error: Cannot implicitly convert type
//System.Linq.IQueryable<AnonymousType#1> to System.Linq.IQueryable<tbl_Item>.
//An explilct conversion exists
query = query.Join(dataSet.Tables["tbl_Resource"].AsEnumerable(),
q => q.OriginalResourceID,
r => r.Field<int>("ResourceID"),
(q, r) => new { q, r });
if (!String.IsNullOrEmpty(param1))
query = query.Where(...);
if (!String.IsNullOrEmpty(param2))
query = query.Where(...);
if (!String.IsNullOrEmpty(param3))
query = query.Where(...);
var results = query.Select(result => new
{
Origin = result.OriginalResourceID, // needs to be a name from Tables["tbl_Resource"]
Current = result.CurrentResourceID, // needs to be a name from Tables["tbl_Resource"]
...,
...,
});
return results; // results are displayed in a DataGridView
}
補充資料表明:
'a is new {tbl_Item q, DataRow r}
我明白,這是最有可能的問題。這是否意味着將DataTables保存在內存中用於查找這樣的內容毫無意義? 「tbl_Resource」包含4列,其中2列是ResourceID(關鍵字)和一個資源名稱(我想推送到Select擴展方法)。
我不會太天真,並相信我正在實施最好的(讀取效率最高的)邏輯。如果這是最好的解決方案,我可以爲Join方法創建一個字典;但是,這似乎會給我現在的錯誤。
任何想法?
我想我只是指出,你缺少一個'extension'方法的關鍵位,這是'this'參數指定哪種類型的擴展方法適用於。你的簽名應該是這樣的:'public static IQueryable QueryItems(this IQueryable someQuery,string param1,string param2,string param3)' – Strelok 2010-10-19 04:39:43
我寫的方法不是擴展方法。不過謝謝... – IAbstract 2010-10-19 14:43:10