LINQ2SQL: Как мне объявить переменную-член типа var? - PullRequest
1 голос
/ 09 мая 2009

У меня есть такой класс

    public class foo
    {

        private void getThread()
        {
         var AllThreads = from sc in db.ScreenCycles
                          join s in db.Screens on sc.ScreenID equals s.ScreenID
                          select s;
        }
    }

Я хочу сделать переменную AllThreads переменной класса вместо переменной метода. Вот так ...

public class foo
{
    var AllThreads;
    private void getThread()
    {
       AllThreads = from sc in db.ScreenCycles
                          join s in db.Screens on sc.ScreenID equals s.ScreenID
                          select s;
    }
}

Как бы то ни было, я не могу объявить переменную класса типа var.

Как мне этого добиться?

Ответы [ 8 ]

2 голосов
/ 09 мая 2009
2 голосов
/ 09 мая 2009

Вы можете сделать это так:

public class foo {    
  IEnumerable<string> AllThreads;    

  private void getThread() {
     AllThreads = (from sc in db.ScreenCycles
                      join s in db.Screens on sc.ScreenID equals s.ScreenID
                      select s.Screen1 + " " + sc.Thread);
  }
}

Обновлено по предложению Джоэла.

1 голос
/ 09 мая 2009

Чтобы сохранить исходный код, попробуйте это

public class foo

    IEnumerable<ScreenCycles> AllThreads;
    private void getThread()
    {
       AllThreads = from sc in db.ScreenCycles
                          join s in db.Screens on sc.ScreenID equals s.ScreenID
                          select s;
    }

}
1 голос
/ 09 мая 2009

var можно использовать только как локальную декларацию. Если вы хотите использовать тип, возвращаемый из выражения LINQ, вы должны создать объект.

0 голосов
/ 09 мая 2009

ОК, это не ответ, а относительный вопрос новичка к stackoverflow, который этот поток хорошо иллюстрирует.

Инструменты разметки кода на этом сайте серьезно ... уникальны. В данном конкретном случае я не понимаю, почему все наши кодовые блоки комментариев очень и очень длинные? Это то, что сделал ОП? Я устал от различных изменений в моем предыдущем примере, и по какой-то причине текстовое поле, в котором находился мой код, было намного длиннее его содержимого. (IE 8)

0 голосов
/ 09 мая 2009

Как многие говорили, вы не можете использовать вар. Рефакторинг кода для использования типов Linq.

public class foo 
{
    ScreenCycle[] allThreads;
    private void getThread() 
    { 
        allThreads = (from sc in db.ScreenCycles join s in db.Screens on sc.ScreenID 
                     equals s.ScreenID select s).ToArray(); 
    } 
}
0 голосов
/ 09 мая 2009

Вы не можете использовать var на уровне класса. Вам нужно предоставить явный тип, если он не будет инициализирован сразу.

Предполагается, что "s" имеет имя типа "Screen":

public class foo
{
    IEnumerable<Screen> AllThreads;
    private void getThread()
    {
       AllThreads = from sc in db.ScreenCycles
                          join s in db.Screens on sc.ScreenID equals s.ScreenID
                          select s;
    }
}
0 голосов
/ 09 мая 2009

Исходная переменная определяет анонимный класс. Для того, чтобы сделать то, что вы, что вы должны определить класс.

Но ... вы могли бы просто сделать это:

List<string> AllThreads;
...