EF。如何联合表格,排序行和获取顶级实体? [英] EF. How to union tables, sort rows, and get top entities?

查看:127
本文介绍了EF。如何联合表格,排序行和获取顶级实体?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想从2个表中的联合记录,对它们进行排序,并从结果集中读取TOP行。

  T1 
--------
Id,Timestamp,Text1

T2
--------
Id,时间戳,Text2

使用SQL可以这样做:

  SELECT TOP 10 * FROM 

SELECT
[Timestamp],
[Text1]

FROM
T1

UNION

SELECT
[Timestamp],
[Text2]

FROM
T2
)as x

ORDER BY [Timestamp]

问:如何使用EF linq执行该任务?

解决方案

您需要具有相同属性名称和类型的匿名类型,才能执行 Union 操作:

  var t1List = from all in all $ $ $ $ $ $ $ $ $ $ $ b TimeStamp = a.TimeStamp,
Text = a.Text1
};
var t2List = from b in allT2
选择新
{
TimeStamp = b.TimeStamp,
Text = b.Text2
};

var result = t1List.Union(t2List).OrderBy(ab => ab.TimeStamp).Take(10);


I want to union records from 2 tables, sort them, and read TOP rows from result set.

T1
--------
Id, Timestamp, Text1

T2
--------
Id, Timestamp, Text2

With SQL it can be done this way:

SELECT TOP 10 * FROM
(
    SELECT 
        [Timestamp], 
        [Text1] 

    FROM 
        T1

    UNION

    SELECT 
        [Timestamp], 
        [Text2]

    FROM 
        T2
) as x

ORDER BY [Timestamp]

Q: How can I do that task using EF linq?

解决方案

You need an anonymous type with the same property names and types before you can do an Union operation:

var t1List = from a in allT1
        select new
        {
            TimeStamp = a.TimeStamp,
            Text = a.Text1
        };
var t2List = from b in allT2
        select new
        {
            TimeStamp = b.TimeStamp,
            Text = b.Text2
        };

var result = t1List.Union(t2List).OrderBy(ab => ab.TimeStamp).Take(10);

这篇关于EF。如何联合表格,排序行和获取顶级实体?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆