c# - 不允许在查询中显式构造实体类型 ''

标签 c# linq .net-4.0

我收到以下错误

Explicit construction of entity type '...TableClassName' in query is not allowed.

Server stack trace: 
   at System.ServiceModel.Channels.ServiceChannel.ThrowIfFaultUnderstood(Message reply, MessageFault fault, String action, MessageVersion version, FaultConverter faultConverter)
   at System.ServiceModel.Channels.ServiceChannel.HandleReply(ProxyOperationRuntime operation, ProxyRpc& rpc)
   at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
   at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
   at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)

这是我的代码。

tgdd = new List<TableClassName>();
    context.DeferredLoadingEnabled = false;
    var t = context.TableClassName.Where(...)
                                  .GroupBy(g => new { g.Date, g.UserID })
                                  .Select(g => new TableClassName
                                  {
                                        PK = 1,
                                        Date = Convert.ToDateTime(g.Key),
                                        Counted = g.Sum(x => x.Counted),
                                        Time = g.Sum(x => x.Time),
                                        MaxHR = g.Max(x => x.MaxHR),
                                        PeakCal = g.Max(x => x.PeakCal),
                                        PowerIndex = (g.Sum(x => x.PowerIndex)),
                                        Target = g.Max(x => x.Target),
                                        RepTotal = g.Sum(x => x.RepTotal),
                                        Lifted = g.Sum(x => x.Lifted),
                                        UserID = Convert.ToInt64(g.Key)
                                   }).ToList();

                        foreach (TableClassName r in t)
                        {
                            tgdd.Add(r);
                        }

我没有语法错误。这是一个网络服务。我在调用它时遇到了问题。

最佳答案

考虑以下几点:

context.DeferredLoadingEnabled = false; 
tgdd = context.TableClassName.Where(...) 
                             .GroupBy(g => new { g.Date, g.UserID })
                             .AsEnumerable() 
                             .Select(g => new TableClassName 
                             { 
                                   PK = 1, 
                                   Date = Convert.ToDateTime(g.Key), 
                                   Counted = g.Sum(x => x.Counted), 
                                   Time = g.Sum(x => x.Time), 
                                   MaxHR = g.Max(x => x.MaxHR), 
                                   PeakCal = g.Max(x => x.PeakCal), 
                                   PowerIndex = (g.Sum(x => x.PowerIndex)), 
                                   Target = g.Max(x => x.Target), 
                                   RepTotal = g.Sum(x => x.RepTotal), 
                                   Lifted = g.Sum(x => x.Lifted), 
                                   UserID = Convert.ToInt64(g.Key) 
                              }).ToList(); 

通过在 Group 操作之后调用 AsEnumerable,我们强制投影到客户端的自定义类型,而不是服务器不知道您的自定义类型的服务器。此外,通过对查询调用 ToList,您无需遍历结果并将它们添加到另一个列表。只需将第一个 ToList 的结果直接分配给您要返回的对象。

关于c# - 不允许在查询中显式构造实体类型 '',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7352092/

相关文章:

c# - Mapster.Tool 使用 codegen 生成映射器而不是 DTO

c# - 列表中的 LINQ Concat 子列表

c# - 异步委托(delegate)操作澄清?

c# - 如何强制用户将建议的条目输入 ComboBox?

c# - Array.ForEach 无法从用法推断数组元素类型

c# - ConnectionString 中未指定 OLE DB 提供程序。 '供应商= SQLOLEDB;

c# - 参数字典包含参数的空条目,但参数存在

c# - 使用 LINQ 进行分组/多重分组

vb.net - 为什么这个关于 Dictionary<TKey, TValue> 的 Linq 查询不作为 DataSource 工作

asp.net - 无法在嵌入式 ASPX 代码中引用动态对象