在 LINQ 中选择不同的行

本文关键字:选择 LINQ | 更新日期: 2023-09-27 18:31:01

我有两个函数和一个有 2 行的表。我希望一个函数选择第一行,另一个函数选择第二行。我有点迷茫,因为我对 LINQ 很陌生。

这是我当前的代码:

    public static bool First() {
        using (Entities db = new Entities()) {
            DateTime FirstValue = (
                from a in db.Table
                select a.Timestamp
            ).Single();

    public static bool Second() {              
        using (Entities db = new Entities()) {
            DateTime SecondValue = (
                from a in db.Table
                select a.Timestamp
            ).Single();

我使用别人的代码,我是 LINQ 的新手,所以我不确定 Single() 也是做什么的。我觉得我的代码中不需要它,但我不确定。

在 LINQ 中选择不同的行

怎么样:

public static bool First() {
    using (Entities db = new Entities()) {
        DateTime FirstValue = (
            from a in db.Table
            select a.Timestamp
        ).FirstOrDefault();

public static bool Second() {              
    using (Entities db = new Entities()) {
        DateTime SecondValue = (
            from a in db.Table
            select a.Timestamp
        ).Skip(1).FirstOrDefault();

@dkackman提供了正确的答案(使用First/FirstOrDefault和Skip方法),但我想提一下,您可以避免混合查询语法和方法语法,方法可以简化为:

public static DateTime First() 
{
    return GetByIndex(0);
}
public static DateTime Second() 
{
    return GetByIndex(1);
}
public static DateTime GetByIndex(int index)
{
    using (Entities db = new Entities())
       return db.Table.Select(a => a.TimeStamp).Skip(index).First();        
}

试试这样,

private void First()
{
    using (WinEntitie obj = new WinEntitie())
    {
        var FirstValue = (from a in obj.Employees select a.EmpName).Take(1);
    }
}
private void Sec()
{
    using (WinEntitie obj = new WinEntitie())
    {
        var FirstValue = (from a in obj.Employees orderby a.EmpID ascending select a.EmpName ).Skip(1).First();
    }
}

使用常用方法,例如您想要跳过的任何值,只需将其传递给索引即可。 并且还使用 FirstOrDefault,因为相应的值返回 null 表示它将处理或以其他方式执行。

public static DateTime GetByIndex(int index)
{
    using (Entities db = new Entities()) {
       return db.Table.Select(a => a.TimeStamp).Skip(index).FirstOrDefault();        
    }
  return null;
}

我对 LINQ 感到不知所措,我应该简单地使用"where"语句在我的查询中查找某些内容......也许我需要休息一下