2014-02-22 1 views
0

궁극적으로 내 MVC 테이블의 열에 OrderNumbers 문자열이 있어야합니다. 여기Linq 쿼리에서 문자열 목록을 어떻게 집계 할 수 있습니까?

public class OrderShippedListModel 
{ 
    public int ID { get; set; } 

    public string Label { get; set; } 

    public string Location { get; set; } 

    [Display(Name = "Create Date")] 
    public DateTime CreateDate { get; set; } 

    [Display(Name = "Last Modified Date")] 
    public DateTime LastModifiedDate { get; set; } 

    [Display(Name = "Product Ship Date")] 
    public DateTime? ProductShipDate { get; set; } 

    [Display(Name = "Close Date")] 
    public DateTime? CloseDate { get; set; } 

    [Display(Name = "Job Numbers")] 
    public string OrderNumbers { get; set; } 
} 

답변

3

사용 string.Join 내 클래스 모델의 나는

public IEnumerable<OrderShippedListModel> GetRecentShippedOrders(string authenticatedUsername) 
{ 
    User currentUser = new User().GetUser(authenticatedUsername); 
    Order (from r in dc.Orders 
      where r.Location.OrganizationID == currentUser.OrganizationID 
      && r.CloseDate != null 
      && r.ProductShipDate != null 
      orderby r.LastModifiedDate descending 
      select new OrderShippedListModel 
      { 
       ID = r.ID, 
       OrderNumbers = r.Processes.Select(p=>p.OrderNumber), //This needs to aggregate to a string 
       Label = r.Label, 
       Location = r.Location.Label, 
       CreateDate = r.CreateDate, 
       ProductShipDate = r.ProductShipDate, 
       LastModifiedDate = r.LastModifiedDate, 
       CloseDate = r.CloseDate 
      }).Take(3); 
} 

의 컬렉션이 알아낼 필요가없는 것 :

OrderNumbers = string.Join("", r.Processes.Select(p=>p.OrderNumber)), 
0

또 다른 집합입니다 :

var s = r.Processes.Aggregate((accum, elem) => accum += elem.OrderNumber) 
+0

이것은 극히 적은 효율성입니다. 결과적으로 중간 문자열의 * lot *이 생성되므로 새로운 문자 버퍼를 할당하고 버퍼간에 동일한 데이터를 반복해서 복사하는 데 많은 시간을 소비합니다. – Servy

+0

비효율적 인 것을 나는 몰랐다. 이것을 지적 해 주셔서 감사합니다. – Paul

관련 문제