c# - 如何合并返回匿名类型的 lambda 的 LINQ 查询?

标签 c# linq lambda union

我正在尝试合并其中的 2 个列表:

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>'

我需要做什么来实现这个合并?

最佳答案

要使用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);

关于c# - 如何合并返回匿名类型的 lambda 的 LINQ 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17333795/

相关文章:

nhibernate - NHibernate 3是如何解决QueryOver<>语法的?

c++ - Lambda 捕获列表 : capturing object's member field by value not possible without capturing the whole object?

Web API Controller 方法的 LINQ 查询 JOIN 两个表

random - Pyspark - 在特定列上运行的 Lambda 表达式

c# - 限制C#中的并行线程数

c# - Silverlight:为图像添加透明度

C# - 使用 Linq 选择 XML 后代

c# - 返回结果还是先放到变量中?

c# - Visual C# 创建数据库路径,使其在不同的 PC 上运行

c# - 在 .NET 中解析一个大的指数数