【问题标题】:LINQ: The specified type member is not supported in LINQLINQ:LINQ 不支持指定的类型成员
【发布时间】:2011-09-25 22:45:25
【问题描述】:

我正在尝试运行下面的 linq 语句。我收到以下错误消息:

LINQ to Entities 不支持指定的类型成员“CustomerID”。仅支持初始化器、实体成员和实体导航属性。

我单步执行了代码,当我进行查询并尝试使用“ToList()”进行转换时会发生这种情况。

有什么想法吗?我将如何重写此查询以使 LINQ to Entities 停止抱怨。

史蒂夫

                var query = from l in db.QBPOLines
                            join t in db.tblJobTasks on l.POID equals t.PurchaseOrderID
                            join j in db.tblJobTasks on t.JobID equals j.JobID
                            join c in 
                            (
                                from c in db.tblCustomers
                                select new 
                                {
                                    c.CustomerID,
                                    PricingID = c.PricingID == null || c.PricingID == 0 ? 1 : c.PricingID
                                }
                            ) on j.CustomerID equals c.CustomerID
                            join m in db.QBItemsPriceMaps on l.Item equals m.ItemName
                            join s in db.tblCustomerPricingSchemes on c.CustomerID equals s.CustomerID into g1
                            from s in g1.DefaultIfEmpty()
                            join p in db.tblPricingSchemes on l.LangPairs equals p.PSLangPairID into g2
                            from p in g2.DefaultIfEmpty()
                            where t.JobID == jobID
                               && s.PSLangPairID == l.LangPairs
                               && p.PSDescID == c.PricingID
                            select new
                            {
                                j.JobID,
                                l.Item,
                                l.LangPairs,
                                l.Qty,
                                Rate = s.PSLangPairID != null 
                                    ? (m.CustomerPriceField == "PS_FZ50" ? s.PS_FZ50 :
                                       m.CustomerPriceField == "PS_FZ75" ? s.PS_FZ75 :
                                       m.CustomerPriceField == "PS_FZ85" ? s.PS_FZ85 :
                                       m.CustomerPriceField == "PS_FZ95" ? s.PS_FZ95 : null)

                                    : (m.CustomerPriceField == "PS_FZ50" ? p.PS_FZ50 :
                                       m.CustomerPriceField == "PS_FZ75" ? p.PS_FZ75 :
                                       m.CustomerPriceField == "PS_FZ85" ? p.PS_FZ85 :
                                       m.CustomerPriceField == "PS_FZ95" ? p.PS_FZ95 : null)
                            };

                List<tblJobManagementLineItem> list = query.ToList().ConvertAll(i => new tblJobManagementLineItem
                {
                    JobID = i.JobID,
                    LineItemDescr = i.Item,
                    LanguagePairID = i.LangPairs,
                    SourceWordCount = (int)i.Qty,
                    QtyToInvoice = (int)i.Qty,
                    //item.JobInvoiceID <--- Implement later
                    Rate = i.Rate
                });

【问题讨论】:

  • 不要在 EF 名称中使用匈牙利符号。

标签: c# asp.net-mvc linq-to-entities


【解决方案1】:

我认为问题在于您不能加入匿名类型的集合。

PricingId 属性移动到后面的let 子句并直接加入Customers

【讨论】:

  • 这里是“错误”或更确切地说是错字:在 l.POID 上的 db.tblJobTasks 中加入 t 等于 t.PurchaseOrderID 在 db.**tblJobTasks** 中加入 j t.JobID 等于 j.JobID该死的智能感知!这应该是一个类似于“tblJobTasks”的不同表。改变这个并且查询有效。我无法回答自己的问题,因为我的分数低于 100 分!史蒂夫
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-27
  • 2012-07-17
  • 2012-03-03
  • 1970-01-01
  • 2013-03-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多