0

LINQに問題があります

var operations = (from c in dCAPPEntities.CIC_OPERAZIONI
                                where c.CD_CIC_PRODUZIONE == 15835 && !(from s in dCAPPEntities.CIC_SEQUENCE where s.CD_CIC_PRODUZIONE==15835 select s.CD_CIC_OPERAZIONE).Contains(c.CD_CIC_OPERAZIONI) select new { c }).GroupBy(i=>i.c.CD_CIC_OPERAZIONI, i=> new Alternative1{ State=0, Iden=i.c.Iden});

このクエリを実行すると、次のエラーが発生します。指定されたタイプのメンバー'Iden'は、LINQtoEntitiesではサポートされていません。初期化子、エンティティメンバー、およびエンティティナビゲーションプロパティのみがサポートされます。

クエリにIden=""と書くと機能するので、なぜエラーが発生したのかわかりません。

また、使用したいくつかのクラスのコードを追加します。

public interface IAlternative
{
    string Iden { get; }

    int State { get; set; }

}

テーブルを拡張する部分クラス

 public partial class CIC_OPERAZIONI : IAlternative
{
public string Iden
    {
        get
        {
            return AFCDOPER + "\r" + AFDSOPER;
        }
    }

    private int _state = 0;
    public int State
    {
        get { return _state; }
        set
        {
            _state = value;
        }
    }
}

そして最後のクラスは問題を理解するのに役立つと思います

public class Alternative1 : INotifyPropertyChanged, IAlternative
{
    public event PropertyChangedEventHandler PropertyChanged;

    #region IAlternative Members

    public string Iden { get; set; }


    public int State { get; set; }
4

1 に答える 1

1

cですCIC_OPERAZIONICIC_OPERAZIONI.Idenはエンティティメンバーまたはナビゲーションプロパティではなく、他のプロパティに依存する値を持つ計算プロパティです。EFはそれをサポートしていません。クエリが実際にCIC_OPERAZIONIオブジェクトを作成することはないため、CIC_OPERAZIONIメンバー関数またはプロパティを呼び出す方法はありません。他のプロパティの定義に応じて、インラインで展開すると機能する場合と機能しない場合があります。

[...].GroupBy(
    i=> i.c.CD_CIC_OPERAZIONI,
    i=> new Alternative1
        {
            State = 0,
            Iden = i.c.AFCDOPER + "\r" + i.c.AFDSOPER
        })

それが機能しない場合は、おそらくエンティティメンバーであるか、エンティティメンバーではないためAFCDOPERAFDSOPERあり、他のプロパティでも同じことを行う必要があります。

于 2012-07-18T07:43:26.827 に答える