2013-06-27 1 views
5

나는 이러한에서이 목록을 결합하기 위해 노력하고있어 :익명 형식을 반환하는 lambda의 LINQ querys를 병합하는 방법은 무엇입니까?

var quartEst = Quarterly_estimates 
.OrderByDescending (q => q.Yyyy) 
.ThenByDescending (q => q.Quarter) 
.Where (q => 
    q.Ticker.Equals("IBM") 
    && 
    q.Eps != null 
    ) 
.Select (q => new { 
    ticker = q.Ticker, 
    Quarter = q.Quarter, 
    Year = q.Yyyy, 
    Eps = q.Eps}) 
.AsEnumerable() 
.Where (q => Convert.ToInt32(string.Format("{0}{1}", q.Year, q.Quarter)) > Convert.ToInt32(finInfo)); 

var quartAct = Quarterlies 
.OrderByDescending (q => q.Yyyy) 
.ThenByDescending (q => q.Quarter) 
.Where (q => 
    q.Ticker.Equals("IBM") 
    && 
    Convert.ToInt16(q.Yyyy) >= DateTime.Now.Year - 3 
    ) 
.Select (q => new { 
    Tick = q.Ticker, 
    Quarter = q.Quarter, 
    Year = q.Yyyy, 
    Eps = q.Eps_adj}) 
.AsEnumerable() 
.Where (q => Convert.ToInt32(string.Format("{0}{1}", q.Year, q.Quarter)) <= Convert.ToInt32(finInfo)); 

나는 간단한 연합 (EU) 명령에 대한 오류를 얻을 : 여기

var quartComb = quartEst.Union(quartAct); 

있어 오류 : 무엇을

Instance argument: cannot convert from 'System.Collections.Generic.List<AnonymousType#1>' to 'System.Linq.IQueryable<AnonymousType#2>' 

을 이 병합을 달성하기 위해해야합니까?

답변

6

Union 메서드를 사용하려면 컬렉션의 형식이 동일해야합니다. 두 개의 익명 유형이 동일하게 간주 되려면 정확하게 동일한 유형의 동일한 멤버가 있어야합니다.

이 시도 :

var quartEst = Quarterly_estimates 
    ... 
    .Select (q => new { 
     Tick = q.Ticker,  // renamed ticker to Tick 
     Quarter = q.Quarter, 
     Year = q.Yyyy, 
     Eps = q.Eps}) 
    ... 

var quartAct = Quarterlies 
    .Select (q => new { 
     Tick = q.Ticker, 
     Quarter = q.Quarter, 
     Year = q.Yyyy, 
     Eps = q.Eps_adj}) 
    ... 

var quartComb = quartEst.Union(quartAct); 
+1

1+ 또는 이름 시세는? – Olrac

+0

@loy 네, 그게 효과가 있습니다. 똑같은만큼 이름이 무엇인지는 중요하지 않습니다. –

0

동적으로 캐스팅해야 두 개의 서로 다른 익명의 유형을 캐스팅하기 위해 여기에 시세에 아래 코드

protected void Page_Load(object sender, EventArgs e) 
    { 
     List<AlertInfo> alert = new List<AlertInfo>(); 
     alert.Add(new AlertInfo() { StratId = 1, GroupId = 1 }); 
     alert.Add(new AlertInfo() { StratId = 1, GroupId = 2 }); 
     alert.Add(new AlertInfo() { StratId = 1, GroupId = 3 }); 
     alert.Add(new AlertInfo() { StratId = 2, GroupId = 1 }); 
     alert.Add(new AlertInfo() { StratId = 2, GroupId = 2 }); 
     alert.Add(new AlertInfo() { StratId = 2, GroupId = 3 }); 
     alert.Add(new AlertInfo() { StratId = 3, GroupId = 1 }); 
     alert.Add(new AlertInfo() { StratId = 3, GroupId = 2 }); 

     //To know how much data will get stored 
     var totalDataStore = alert.Select(x => x.StratId).Distinct().ToList(); 

     var result = alert.Where(x => x.StratId == 1).Select(x => new { Data1 = "Group" + x.StratId + x.GroupId }).Cast<dynamic>().Union(alert.Where(y => y.StratId == 2).Select(y => new { Data2 = "Group" + y.StratId + y.GroupId })).ToList(); 

    } 
} 

public class AlertInfo 
{ 
    public int StratId { get; set; } 
    public int GroupId { get; set; } 
} 
관련 문제