【问题标题】:join 2 query results orderby two different valuesjoin 2个查询结果orderby两个不同的值
【发布时间】:2011-07-12 12:55:48
【问题描述】:

假设这个对象:

DXMessage
{
    public byte[] msg;
    public int time;
    public int millisecond;
}

并假设我有 2 个排序列表:

public static SortedList<long, DXMessage> brimstoneMessages = 
            new SortedList<long, DXMessage>();

public static SortedList<long, DXMessage> gpsMessages =
            new SortedList<long, DXMessage>();

我对 2 个不同的消息列表执行了 2 个查询:

var bsQuery = GlobalObjects.bsMessages.Where(t =>
            ((t.Value.Time >= eventStart))).ToList();

var gpsQuery = GlobalObjects.gpsMessages.Where(t =>
            ((t.Value.Time >= eventStart))).ToList();

我想获取这两个查询的结果,并按时间和毫秒的升序加入它们。

【问题讨论】:

    标签: c# linq join sql-order-by


    【解决方案1】:

    您所说的“连接”是指“连接”而不是某种 SQL 连接吗?我怀疑你只是想要:

    var combined = bsQuery.Concat(gpsQuery)
                          .OrderBy(x => x.Value.time)
                          .ThenBy(x => x.Value.millisecond);
    

    顺便说一下,不清楚为什么您的查询中有这么多括号 - 在这种情况下,您似乎可以实际上更早地执行组合:

    var combined = GlobalObjects.bsMessages
                                .Concat(GlobalObjects.gpsMessages)
                                .Where(t => t.Value.Time >= eventStart)
                                .OrderBy(t => t.Value.Time)
                                .ThenBy(t => t.Value.Millisecond);
    

    【讨论】:

    • /@Soner,我相信你们是对的。就像我之前提到的,我对 Linq 没有太多经验。我对我什至不知道正确的术语并不感到惊讶。我需要花一点时间来更改我的代码以接受此信息,但我会继续并将其标记为答案。
    • 和@Jon!。也是该网站的新手,所以一定要确保并提及您。
    • 我打算抓住 KeyValuePair。我的查询已相应修改
    • @Jason:啊,好吧,所以它们不是这样的消息列表......编辑。
    猜你喜欢
    • 1970-01-01
    • 2017-04-28
    • 1970-01-01
    • 1970-01-01
    • 2013-06-01
    • 2021-11-13
    • 2015-02-07
    • 2020-03-08
    • 1970-01-01
    相关资源
    最近更新 更多