39

エンティティフレームワークを使用していますが、次の例のようなincludeメソッドが見つかりません。

using(ArticleExtractorEntities db=new ArticleExtractorEntities())  
{
    Preference pref= db.Preferences.Include(  

ここでは、パラメーター(文字列パス)を含む関数includeのみが見つかり、他のオーバーロードは見つかりません。ラムダ式でIncludeを使用するにはどうすればよいですか?

4

4 に答える 4

97

System.Linqにはありません。追加

using System.Data.Entity
于 2012-06-29T09:42:19.660 に答える
12

アップデート。linq クエリを .Include() で拡張する方法を探している人向け

もはやそうではありません:

using System.Data.Entity;

netcoreapp1.0 では次のようになります。

using Microsoft.EntityFrameworkCore;
于 2016-12-07T21:11:53.587 に答える
1

このブログ投稿に示すように実装できます。

public static class ObjectQueryExtension
{
    public static ObjectQuery<T> Include<T>(this ObjectQuery<T> mainQuery, Expression<Func<T, object>> subSelector)
    {
        return mainQuery.Include(FuncToString(subSelector.Body));
    }
    private static string FuncToString(Expression selector)
    {
        switch (selector.NodeType)
        {
            case ExpressionType.MemberAccess:
                return ((selector as MemberExpression).Member as Reflection.PropertyInfo).Name;
            case ExpressionType.Call:
                var method = selector as MethodCallExpression;
                return FuncToString(method.Arguments[0]) + "." + FuncToString(method.Arguments[1]);
            case ExpressionType.Quote:
                return FuncToString(((selector as UnaryExpression).Operand as LambdaExpression).Body);
        }
        throw new InvalidOperationException();
    }
    public static K Include<T, K>(this EntityCollection<T> mainQuery, Expression<Func<T, object>> subSelector)
        where T : EntityObject, IEntityWithRelationships
        where K : class
    {
        return null;
    }
    public static K Include<T, K>(this T mainQuery, Expression<Func<T, object>> subSelector)
        where T : EntityObject
        where K : class
    {
        return null;
    }
}
于 2012-06-29T09:44:32.797 に答える