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});

当我执行此查询时,我收到以下错误:LINQ to Entities 中不支持指定的类型成员“Iden”。仅支持初始化程序、实体成员和实体导航属性。

如果我在查询中写 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 回答