2012-07-18 56 views
0

我在使用LINQLINQ to Entities不支持指定的类型成员“”。

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到实体。仅支持初始化程序,实体成员和实体导航属性。

如果我在它的作品中写入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; } 

回答

1

cCIC_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不是一个实体成员要么和你需要对其他属性做同样的事情。

+0

在这种情况下,我得到了另一个错误,这tyoe是关于铸造:无法转换类型'System.Decimal'键入'System.Object'。 LINQ to Entities仅支持投射实体数据模型基元类型。但我不能在LINQ表达式中使用ToString。 – andrea 2012-07-18 07:54:33

+0

和如果我只留下字符串属性,查询正确执行,但伊登总是设置为NULL – andrea 2012-07-18 07:57:20

+0

我没有看到任何关于在您的问题的小数属性。这是什么性质?为了使'AFCDOPER +“\ r”+ AFDSOPER'在C#中工作,'AFCDOPER'和'AFDSOPER'必须是字符串属性,对吧? – hvd 2012-07-18 07:58:08

相关问题