在LINQ中选择不同的行

时间:2013-09-10 23:35:23

标签: c# sql linq

我有两个函数和一个包含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()的功能是什么。我觉得我的代码中不需要它,但我不确定。

5 个答案:

答案 0 :(得分:3)

怎么样:

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

答案 1 :(得分:3)

@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();        
}

答案 2 :(得分:2)

试试这个,

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

答案 3 :(得分:1)

使用常见的方法就像这样一个你想要跳过的值只是将它传递给索引。并且还使用 FirstOrDefault ,因为相应的值返回null意味着它将小心或以其他方式获得execption。

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

答案 4 :(得分:0)

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