简体   繁体   中英

LINQ2SQL: How do I declare a member variable of type var?

I have a class like this

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

I want to make the AllThreads variable a class variable instead of a method variable. Like this...

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

How ever it wont let me declare a class variable of type var.

How to I achieve this?

You could do it like this:

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

Updated per Joel's suggestion.

var can only be used as a local declaration. If you want to use the type returned from a LINQ expression you must have build an object.

To preserve your original code, try this

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

}

The initial var is defining an anonymous class. In order to do what you what you have to define the class.

But...you could probably just do this:

List<string> AllThreads;

You can't use var at the class level. You need to provide an explicit type if it's not going to be initialized right away.

Assuming "s" is of a type name "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;
    }
}

As many of said, you can't use var. Refactor your code to use Linq types.

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

OK, this isn't an answer, just a relative newbie to stackoverflow question, which this thread illustrates quite well.

The code markup tools on this site are seriously... um, unique. What I dont understand in this particular case is, why are all our comment codeblocks very very long? Is it something the OP did? I tired various edits on my earlier example, and for some reason the textbox my code was in was much longer than its contents. ( IE 8 )

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM