我收到以下错误
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/