LINQ到SQL连接顺序

本文关键字:顺序 连接 SQL LINQ | 更新日期: 2023-09-27 18:18:54

我是LINQ和join的新手,所以如果我问错了,请原谅我。我有两张表

Table1

id   name    date
1    Mike    20-10-15
2    John    21-10-15
3    Sam     23-10-15

id   name   date
1    Ashle  19-10-15
2    Lily   21-10-15
3    Jeni   22-10-15
4    April  23-10-15

我需要5条记录使用join,应该是orderbydate,最近的记录。

你们能帮我吗,我真的需要弄清楚join是如何与order一起工作的。由于

编辑:

它们是两个不同的表,所以没有外键,所以我想我不能使用Join,所以到目前为止我所做的是这样的

var combinddata = (from t1 in db.Table1
                        select t1.id)
                            .Concat(from t2 in db.Table2
                                    select t2.id);

我不知道如何只得到5条记录,如何比较DateTime基础上两个表的记录。

输出应为

    山姆
  1. 4月
  2. Jeni
  3. 约翰
  4. 莉莉

LINQ到SQL连接顺序

可以连接来自不同表的相同匿名类型。如果还选择日期,则可以按日期降序排序,并取前5条记录:

Table1.Select (t1 => 
    new
    {
        Id = t1.Id,
        Name = t1.Name,
        Date = t1.Date
    }
).Concat(
Table2.Select (t2 => 
    new
    {
        Id = t2.Id,
        Name = t2.Name,
        Date = t2.Date
    }
))
.OrderByDescending (x => x.Date).Take(5)

注意,这将优先考虑Table1中的项。如果项目5和6在连接的结果是在同一日期,但分别来自Table1Table2,你只得到项目从Table1

如果您愿意,您可以只从该结果中选择名称,但我假设您的输出只显示预期的记录顺序,而不是确切的预期结果。

var query = 
    from Table1 in table1
    join Table2 in table2 on table1.id equals table2.id 
    orderby table1.date ascending 
    select table1.date;

试试这个

var combinddata = (from t1 in db.Table1
                        select t1.Name)
                            .Concat(from t2 in  db.Table2 
                                    select t2.Name).OrderByDescending(x => x.date).Take(5);