2013-09-10 7 views
1

У меня есть две функции и таблица с двумя строками. Я хочу, чтобы одна функция выбирала первую строку и другую функцию для выбора второй строки. Я немного потерялся, потому что я очень новичок в LINQ.Выбор различных строк в 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(); 

Я работаю с чужой код и Im новой для LINQ, так что я не уверен, что Single() делает также. Мне кажется, что мне это не нужно в коде, но я не уверен.

+1

Все 'Single' делает вам одну запись. Вид вроде 'LIMIT 1' или' TOP 1' в 'SQL'. Но он выдаст ошибку, если он не получит запись назад. – paqogomez

+0

Мне кажется, что обе мои функции дадут мне первую строку в таблице – Liondancer

+1

Не смотрит на меня, как есть какая-то разница. Есть ли что-то другое, кроме метки времени в таблице, чтобы отличать их? – paqogomez

ответ

0

Я был поражен LINQ, что я должен просто использовать «где» заявление, чтобы найти что-то в моем запросе ... Может быть, мне нужен перерыв

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

Я просто положил 'where' a.Id == (int). Я был запуган LINQ, так как я впервые использовал его, но я получил идею = D – Liondancer

3

@dkackman при условии правильный ответ (используйте First/FirstOrDefault и Пропустить методы), но я хочу отметить, что вы можете избежать смешивания синтаксис запросов и синтаксис метода и методы могут быть упрощена:

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

Try например,

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

Используйте общепринятый метод, подобный этому, когда-либо значение, которое вы хотите пропустить, просто передайте его индексу. а также использовать 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; 
} 
Смежные вопросы