LINQ to SQL加入orderby

时间:2015-10-23 12:08:22

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

我是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如何与orderby一起工作。 感谢

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

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

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

输出

  1. Sam
  2. 四月
  3. 杰尼
  4. 约翰
  5. 百合

3 个答案:

答案 0 :(得分: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获取该项目。

如果需要,您只能从此结果中选择名称,但我假设您的输出仅显示预期的记录顺序,而不是预期的确切结果。

答案 1 :(得分:0)

试试这种方式

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

答案 2 :(得分:-1)

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