i have nearly 1 million data, which i definitely don't want to query all of them to memory and then group them, so i tried this, but linq2Entity does not recognize string.join(), IEnumerable.toList(), or same things
var capaHrs = (
from newsPerHr in _dbRawDataContext.CapacityPerHours
where newsPerHr.StreamDT >= this.BeginDateTime
&& newsPerHr.StreamDT < this.EndDateTime
&& newsPerHr.ServerName == this.ServerName
group newsPerHr by newsPerHr.StreamDT into grp
let MsgSizeTotal = (from i in grp select i.MsgSize).Sum(x => (int)x)
let MNumber = (from i in grp select i.MsgNumber).Sum(x => (int)x)
let Feeds = (from i in grp select i.FeedName).ToArray()
select new
{
ServerName = ServerName,
FeedName = Feeds,
StreamDT = grp.Key,
MsgSize = MsgSizeTotal,
MsgNumber = MNumber
}).ToList();
_capacityData = capaHrs.Select(x => new CapacityPerHour {
ServerName = x.ServerName,
FeedName = string.Join(", ",x.FeedName),
StreamDT = x.StreamDT,
MsgSize = x.MsgSize,
MsgNumber = x.MsgNumber
}).ToList();
how to make it work?
It only needed a couple of changes:
ToArray in the Feeds declarationServerName and StreamDT Give this a try:
var capaHrs = (
from newsPerHr in _dbRawDataContext.CapacityPerHours
where newsPerHr.StreamDT >= this.BeginDateTime
&& newsPerHr.StreamDT < this.EndDateTime
&& newsPerHr.ServerName == this.ServerName
group newsPerHr by new { newsPerHr.ServerName, newsPerHr.StreamDT } into grp
let MsgSizeTotal = grp.Sum(x => (int)x.MsgSize)
let MNumber = grp.Sum(x => (int)x.MsgNumber)
let Feeds = (from i in grp select i.FeedName)
select new
{
ServerName = grp.Key.ServerName,
FeedName = Feeds,
StreamDT = grp.Key.StreamDT,
MsgSize = MsgSizeTotal,
MsgNumber = MNumber
}).ToList();
_capacityData = capaHrs.Select(x => new CapacityPerHour {
ServerName = x.ServerName,
FeedName = string.Join(", ",x.FeedName),
StreamDT = x.StreamDT,
MsgSize = x.MsgSize,
MsgNumber = x.MsgNumber
}).ToList();
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With