【问题标题】:The specified type member "" is not supported in LINQ to Entities.LINQ to Entities 不支持指定的类型成员“”。
【发布时间】:2012-07-17 04:08:30
【问题描述】:

我在使用 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; }

【问题讨论】:

    标签: visual-studio-2010 linq entity-framework


    【解决方案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 也不是实体成员,您需要对其他属性执行相同操作。

    【讨论】:

    • 在这种情况下,我遇到了另一个错误,这个问题是关于强制转换:无法将类型“System.Decimal”转换为类型“System.Object”。 LINQ to Entities 仅支持转换实体数据模型基元类型。但我不能在 LINQ 表达式中使用 ToString。
    • 如果我只留下字符串属性,查询会正确执行,但 Iden 总是设置为 NULL
    • 我在您的问题中没有看到任何关于小数属性的信息。那是关于什么属性的?为了让 AFCDOPER + "\r" + AFDSOPER 在 C# 中工作,AFCDOPERAFDSOPER 都必须是字符串属性,对吧?
    • 好吧,让我们只使用 AFDSOPER(字符串),在这种情况下查询是正确的,但 Iden 始终为空......似乎我无法访问 CIC_OPERAZIONI 属性
    • 哦,我忘了,EF 看到它的方式和 C# 看到它的方式之间存在细微差别:EF 将其转换为 SQL,SQL 使 table.AFCDOPER + '\r' + table.AFDSOPER 评估为 NULL 如果任一 @987654334 @ 或 table.AFDSOPERNULL。如果是这种情况,你可以试试(i.c.AFCDOPER ?? "") + "\r" + (i.c.AFDSOPER ?? "")
    猜你喜欢
    • 2015-01-27
    • 2013-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-28
    • 1970-01-01
    • 2018-02-19
    • 2015-07-25
    相关资源
    最近更新 更多