【问题标题】:LINQ to SQL Join orderbyLINQ to SQL Join orderby
【发布时间】:2015-10-23 12:08:21
【问题描述】:

我是 LINQ 的新手并加入,所以如果我问错了,请原谅我。 我有两张桌子

表 1

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

表2

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

我需要 5 条使用 Joins 的记录,并且应该按日期排序,最近的记录。

你们能帮帮我吗,我真的需要弄清楚 Joins 如何与 orderby 一起工作。 谢谢

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

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

我不知道如何只获取 5 条记录如何比较基于 DateTime 的两个表中的记录。

输出应该是

  1. 山姆
  2. 四月
  3. 珍妮
  4. 约翰
  5. 莉莉

【问题讨论】:

标签: c# sql-server linq join linq-to-sql


【解决方案1】:

您可以连接来自不同表的相同匿名类型。如果您还选择了日期,您可以按它们降序排列,并取前 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 获取项目。

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

【讨论】:

    【解决方案2】:

    试试这个方法

    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);
    

    【讨论】:

      【解决方案3】:
      var query = 
          from Table1 in table1
          join Table2 in table2 on table1.id equals table2.id 
          orderby table1.date ascending 
          select table1.date;
      

      【讨论】:

      • 它们是两个不同的表,所以没有外键,所以我认为我不能使用Join,那你为什么使用join....
      • @MukeshKalgude:对不起,其实我之前没有提到它,而是在问题标题中使用了 Join。其实我不知道该用什么。加入或连接。
      猜你喜欢
      • 1970-01-01
      • 2011-07-02
      • 1970-01-01
      • 1970-01-01
      • 2015-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-08
      相关资源
      最近更新 更多