我正在尝试将这两个列表组合在一起:
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));
我收到一个简单的Union命令的错误:
var quartComb = quartEst.Union(quartAct);
这是错误:
Instance argument: cannot convert from 'System.Collections.Generic.List<AnonymousType#1>' to 'System.Linq.IQueryable<AnonymousType#2>'
我需要做些什么来实现这种合并?
答案 0 :(得分: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 :(得分: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; }
}