2

LinqKit(http://www.albahari.com/nutshell/linqkit.aspx)を使用しています

具体的なクラスを定義せずに次のコードを機能させる方法はありますか?

LINQtoEntitiesを使用して強く型付けされた動的クエリを構築しようとしています。

エラーが発生しThe parameter 'o' is not in scope.ます。

特定の状況で。

void Main()
{   
    var lquery = from a in Foo select new { Bar = a.Baz }; // <-- error like this
    //var lquery = from a in Foo select new stuff { Bar = a.Baz }; // <-- here no error
    test("Case", lquery, o => o.Bar).Dump();
}

class stuff { public string Bar {get; set;} }

IQueryable<T> test<T>(string val, IQueryable<T> qry, Expression<Func<T, string>> selector){
    var ex = selector.Expand();
    var b = from c in qry.AsExpandable()
            where ex.Invoke(c).Contains(val)
            select c;
    return b;
}

匿名クラスがtest()このエラーで使用されると、具象クラスが使用されるときにエラーがスローされstuffないように見えます。この状況で匿名クラスを使用できるようにする回避策はありますか?

このエラーはLinkKitに関連している可能性があることは理解していますが、そこに飛び込むのに十分な技術的知識がありません...

4

1 に答える 1

1

LinqKitでは、匿名クラスのチェックを ExpressionExpander.VisitMemberAccess() に追加して、匿名クラスが機能するようにしました。

交換した

if (m.Member.DeclaringType.Name.StartsWith ("<>"))
    return TransformExpr (m);

string typeName = m.Member.DeclaringType.Name;
bool isAnonymous = typeName.StartsWith("<>f__AnonymousType"),
     isOuter = !isAnonymous && typeName.StartsWith("<>");
if (isOuter)
    return TransformExpr (m);
于 2012-11-23T17:09:55.500 に答える