我在为包含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