2009-05-08 2 views
1

У меня есть класс, как этотLINQ2SQL: Как объявить переменную-член типа var?

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.

Как это достичь?

+1

Там нет такого понятия, как «типа вар», потому что вар не на самом деле типа - это ключевое слово, которое сообщает компилятор, «Вы выяснить, какой тип поставить здесь, потому что я «У меня есть лучшие дела». –

ответ

1

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

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

} 
+0

Похоже, он выбирает «Экраны», а не «ScreenCycles» –

+0

Стоит ли указывать на то, что оригинальный дизайн класса ошибочен, и вы вообще не должны возвращать IEnumerable? Конечно, именно то, что вы ответили, относится к заданному вопросу, но, в конце концов, совет в корне ошибочен (как прямой результат на вопрос). – Serapth

+0

Я не мог больше не согласиться.Как правило, вы ДОЛЖНЫ возвращать IEnumerable, если у вас нет веских оснований возвращать менее общий тип. Тем не менее, сохранение IEnumerable, которое зависит от подключения к реальной базе данных без первого вызова ToArray или ToList, вероятно, не является такой хорошей идеей. –

2

Вы можете сделать это следующим образом:

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

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

+0

Закрыть, но лучше избегать .ToList(). –

+0

Кроме того, я не думаю, что он возвращает Струны. –

+0

ах, он изменил вопрос ... иначе я бы сделал то же самое, что @The Lame Duck –

0

Начальная переменная определяет анонимный класс. Чтобы сделать то, что вам нужно, чтобы определить класс.

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

List<string> AllThreads; 
1

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

0

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

Предполагая, что «s» имеет имя типа «Экран»:

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

Как многие сказали, вы не можете использовать вар. Обновите свой код, чтобы использовать типы Linq.

0

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

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

Смежные вопросы