我遇到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; }
答案 0 :(得分:1)
c
是CIC_OPERAZIONI
。 CIC_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
})
如果它不起作用,可能是因为AFCDOPER
或AFDSOPER
也不是实体成员,你需要对其他属性做同样的事情。