2012-10-18 6 views
3

J'ai près de 1 million de données, ce que je ne veux absolument pas interroger tous à la mémoire, puis les regrouper, donc j'ai essayé , mais linq2Entity ne reconnaît pas string.join(), IEnumerable.toList(), ou même des chosesLINQ to Entities ne reconnaît pas la méthode 'System.String [] ToArray [String]

   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(); 

comment le faire fonctionner?

Répondre

2

Il ne faut quelques changements:

  1. Suppression de la ToArray dans la déclaration Feeds
  2. Groupés par un type anonyme afin que vous pouvez inclure plusieurs propriétés, ServerName et StreamDT

Donner un essai:

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(); 
Questions connexes