LINQ2SQL:如何声明var类型的成员变量?

时间:2009-05-08 21:19:59

标签: c# .net linq-to-sql 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。

的类变量

如何实现这一目标?

8 个答案:

答案 0 :(得分: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);
  }
}

根据Joel的建议更新。

答案 1 :(得分:2)

答案 2 :(得分:1)

var只能用作本地声明。如果要使用从LINQ表达式返回的类型,则必须构建对象。

答案 3 :(得分: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;
    }

}

答案 4 :(得分:0)

初始var定义了一个匿名类。为了做你所拥有的定义课程的内容。

但是......你可能只是这样做:

List<string> AllThreads;

答案 5 :(得分:0)

您无法在班级使用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;
    }
}

答案 6 :(得分:0)

正如许多人所说,你不能使用var。重构您的代码以使用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(); 
    } 
}

答案 7 :(得分:0)

好的,这不是一个答案,只是stackoverflow问题的一个相对新手,这个线程很好地说明了。

这个网站上的代码标记工具非常严肃......嗯,独一无二。在这个特殊情况下我不明白的是,为什么我们所有的评论代码块都非常长?这是OP做的事情吗?我在前面的例子中厌倦了各种编辑,由于某种原因,我的代码所在的文本框比它的内容长得多。 (IE 8)