【问题标题】:LINQ match two lists within a select statementLINQ 匹配 select 语句中的两个列表
【发布时间】:2016-04-20 17:30:52
【问题描述】:

我有一堆看起来像这样的通用类:

public class MyList<T0, T1, T2>
{
    public T0 Column0;
    public T1 Column1;
    public T2 Column2;
}

...我在两个列表中使用它们,TempResults (Column0-Column15) 和 Disagio (Column0-Column3)。现在我想创建一个新列表,其中包含来自 TempResults 的 3 列和来自 Disagio 的一列,我需要将 Disagio.Column1 与 TempResults.Column13 匹配,然后返回 Disagio.Column2(总会有 0 或 1 个匹配项)。整个代码:

EndResults = TempResults
    .Select(sel => new MyList<string, string, string, string>
    {
        Column0 = sel.Column0,
        Column1 = //ugly part goes here, see below
        Column2 = sel.Column1,
        Column3 = sel.Column12
    })
    .DistinctBy(x => x.Column0)
    .ToList();

到目前为止我已经尝试过:

//Returns an empty list
Disagio.Where(x => x.Column1 == sel.Column13).First().Column2.ToString()


//It returns something, but I doubt it's correct
Disagio.Join(TempResults, x => x.Column1, y => y.Column13, (a, b) => a).First().Column2.ToString()

我可以通过循环来解决问题,但我真的不想这样做。列表永远不会太长,在这种情况下,内存和速度不如可读性重要。

【问题讨论】:

  • Disagio 是这些Disagio 对象的列表吗?
  • Disagio 看起来像这样:List&lt;SomeGenericClass&lt;int, int, float, float&gt;&gt; Disagio

标签: c# linq lambda


【解决方案1】:

试试这个:

    EndResults =
    (
        from tr in TempResults
        join d in Disagio on tr.Column13 equals d.Column1
        select new MyList<string, string, string, string>()
        {
                Column0 = tr.Column0,
                Column1 = d.Column2,
                Column2 = tr.Column1,
                Column3 = tr.Column12
        }
    )
        .DistinctBy(x => x.Column0)
        .ToList();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-22
    • 1970-01-01
    • 1970-01-01
    • 2019-08-20
    • 2017-01-21
    • 1970-01-01
    相关资源
    最近更新 更多