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

C# LINQ2SQL:如何声明var类型的成员变量?,c#,.net,linq-to-sql,var,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;

我有一节这样的课

    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类型的类变量


如何实现这一点?

您可以这样做:

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);
  }
}
公共类foo{
i可数所有线程;
私有void getThread(){
AllThreads=(以db.ScreenCycles为单位从sc开始)
将s加入sc.ScreenID上的db.ScreenID等于s.ScreenID
选择s.Screen1+“”+sc.Thread);
}
}

根据Joel的建议进行更新。

您可以这样做:

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);
  }
}
公共类foo{
i可数所有线程;
私有void getThread(){
AllThreads=(以db.ScreenCycles为单位从sc开始)
将s加入sc.ScreenID上的db.ScreenID等于s.ScreenID
选择s.Screen1+“”+sc.Thread);
}
}

根据Joel的建议进行了更新。

初始变量定义了一个匿名类。为了做你想做的事情,你必须定义类

但是……你可以这样做:

List<string> AllThreads;
列出所有线程;

初始变量定义了一个匿名类。为了做你想做的事情,你必须定义类

但是……你可以这样做:

List<string> AllThreads;
列出所有线程;

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

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

要保留原始代码,请尝试以下操作

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

}
公共类foo
i可数所有线程;
私有void getThread()
{
AllThreads=来自sc,单位为db.ScreenCycles
将s加入sc.ScreenID上的db.ScreenID等于s.ScreenID
选择s;
}
}

要保留原始代码,请尝试以下操作

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

}
公共类foo
i可数所有线程;
私有void getThread()
{
AllThreads=来自sc,单位为db.ScreenCycles
将s加入sc.ScreenID上的db.ScreenID等于s.ScreenID
选择s;
}
}

您不能在类级别使用
var
。如果不能立即初始化,则需要提供显式类型

假设“s”为类型名称“Screen”:

公共类foo
{
i可数所有线程;
私有void getThread()
{
AllThreads=来自sc,单位为db.ScreenCycles
将s加入sc.ScreenID上的db.ScreenID等于s.ScreenID
选择s;
}
}

您不能在类级别使用
var
。如果不能立即初始化,则需要提供显式类型

假设“s”为类型名称“Screen”:

公共类foo
{
i可数所有线程;
私有void getThread()
{
AllThreads=来自sc,单位为db.ScreenCycles
将s加入sc.ScreenID上的db.ScreenID等于s.ScreenID
选择s;
}
}

正如许多人所说,您不能使用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(); 
    } 
}

正如许多人所说,您不能使用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(); 
    } 
}

好的,这不是一个答案,只是stackoverflow问题的一个相对新手,这篇文章很好地说明了这一点


此站点上的代码标记工具严重。。。嗯,独一无二。我不明白的是,为什么我们所有的注释代码块都很长?这是OP做的吗?我对前面的示例进行了各种编辑,由于某种原因,我的代码所在的文本框比它的内容长得多。(IE 8)

好的,这不是一个答案,只是stackoverflow问题的一个相对新手,这篇文章很好地说明了这一点


此站点上的代码标记工具严重。。。嗯,独一无二。我不明白的是,为什么我们所有的注释代码块都很长?这是OP做的吗?我对前面的示例进行了各种编辑,由于某种原因,我的代码所在的文本框比它的内容长得多。(即8)

关闭,但最好避免使用.ToList()。此外,我认为他没有返回字符串。啊,他改变了问题。。。否则我会像@TheLameDuckClose那样做,但最好避免使用.ToList()。此外,我认为他没有返回字符串。啊,他改变了问题。。。否则我会像@TheLameDucks那样做看起来他选择的是“Screens”而不是“ScreenCycles”值得指出的是原始类设计有缺陷,并且通常不应该返回IEnumerable吗?诚然,你的回答对所问的问题是正确的,但最终,这个建议从根本上是有缺陷的(这是问题的直接结果)。通常,您应该返回IEnumerable,除非您有充分的理由返回一个不太通用的类型。然而,存储依赖于实时数据库连接的IEnumerable而不首先调用数组或列表可能不是一个好主意。看起来他选择的是“Screens”而不是“ScreenCycles”,是否值得指出原始类设计有缺陷,并且通常不应返回IEnumerable?诚然,你的回答对所问的问题是正确的,但最终,这个建议从根本上是有缺陷的(这是问题的直接结果)。通常,您应该返回IEnumerable,除非您有充分的理由返回一个不太通用的类型。然而,存储一个依赖于实时数据库连接的IEnumerable而不首先调用ToArray或ToList可能不是一个好主意。没有“类型var”这样的东西,因为var实际上不是一个类型,而是一个能说明问题的关键字