我在爲包含Linq查詢中指定列的翻譯的IQueryable創建擴展方法時遇到問題。創建擴展方法以包含子查詢
假設我有下面的查詢。 我想在CFG_Article IQueryable上調用一個方法IncludeTranslation來指定我想要獲取翻譯的列。 有人可以幫助我在正確的方向。
var translations =
from t in UoW.CFG_TRANSLATION.GetAll()
select t;
var result = (
from a in UoW.CFG_ARTICLE.GetAll()
select new
{
a,
translation = translations
.Where(t=> t.TR_TEXT == a.AR_NAME).FirstOrDefault()
});
我到目前爲止都是下面的代碼,但是這不能編譯。
public static IQueryable IncludeTranslation<T>(
this IQueryable<T> query,
Expression<Func<t, bool>> fieldToTranslate)
{
// this will get an IQueryable of CFG_TRANSLATION
var translations = GetTranslations();
var result = (
from q in query
select new
{
q,
translation = translations
.Where(t=> t.TR_TEXT == fieldToTranslate)
.FirstOrDefault()
});
// even better is to return all fields from query
// + the TR_TRANSLATION field from the translations table
return result;
}
Hello qujck, 你能告訴我應該如何調用這個方法。 我的意思是我應該填寫fieldToTranslate參數。 來自翻譯表的字段應該與來自IQueryable的字段相比較 –
Gabe
2013-05-13 14:48:04
您好,謝謝您的回答。用你的例子,我現在可以編譯,但我在運行時得到一個錯誤。 LINQ to Entities不支持LINQ表達式節點類型「Invoke」。這可能是因爲實體框架無法將func轉換爲sql語句。有什麼建議麼? – Gabe 2013-05-13 20:05:11
@Salako我想你可能會走運:-( – qujck 2013-05-13 21:24:44