1

EF5コードファーストモデルを使用しています。次のEntityFrameworkクエリについて考えてみます。

var results = from i in context.Table1
            where i.ID == Id // passed in
            select new TableInfo()
            {
                Name = i.Name,
                ActionDate = i.Action.ActionDate,
                CreatedDate = i.Action.CreatedDate,
                CreatedBy = i.Action.CreatedBy.FullName
            };

FullNameプロパティは、次のように定義されます。

[NotMapped]
[Display(Name = "Full Name")]
public string FullName
{
    get
    {
        string ret = string.Empty;
        if (String.IsNullOrEmpty(LAST_NAME) || String.IsNullOrEmpty(FIRST_NAME))
        {
            return "";
        }
        else
        {
            return string.Format("{0}, {1}", LAST_NAME, FIRST_NAME);
        }

    }
}

エラーが発生します:

指定されたタイプメンバー'FullName'は、LINQtoEntitiesではサポートされていません。初期化子、エンティティメンバー、およびエンティティナビゲーションプロパティのみがサポートされます。

同じことを行う拡張メソッドを作成すると、同様のエラーが発生します。だから問題は、EFがデータストアでこれらのものを実行しようとしないようにするにはどうすればよいですか?

4

1 に答える 1

2

問題は、select 句の初期化子の式です。

CreatedBy = i.Action.CreatedBy.FullName

これにより、Linq-to-Entity プロバイダーは "FullName" という名前のプロパティのマッピングを見つけようとします。拡張メソッドを使用しようとする場合も同様です。

ただし、これを行うことができます:

var results = 
    from i in context.Table1
    where i.ID == Id // passed in
    select new TableInfo()
    {
        Name = i.Name,
        ActionDate = i.Action.ActionDate,
        CreatedDate = i.Action.CreatedDate,
        CreatedBy = i.Action.CreatedBy
    };

そしてitem.CreatedBy.FullName、カスタムプロパティを介して名前にアクセスするために使用します

于 2013-03-14T01:45:15.933 に答える