views:

393

answers:

3

I have a query with single result. The result is an anonymouse type. How can I use access the type so I don't have to use query.Single() every time?

This is my query:

var result = from row in db.Table 
select new { CustomName = row.RowName };

This is how I use it right now:

string name = result.Single().CustomName;

Of course my real code has a lot more properties and for every property I have to call .Single() every time. Is there an easier way to access CustomName here?

+2  A: 

Have you tried assigning the Single result to a variable?

var singleResult = result.Single();
string name = singleResult.CustomName;
// etc...

Furthermore, each time you call Single() it will execute the query. You should grab the value once and use it wherever you need. As long as you use var you should be fine, you just can't return that anonymous type from a method.

dahlbyk
+3  A: 

You can say

var result = (from row in db.Table
              select new { CustomName = row.RowName }).Single();

string name = result.CustomName;
// etc.

But probably the best way is to encapsulate your result into a bonafide non-anonymous class. Then you can say

MyClass result = (from row in db.Table
                  select new MyClass() { CustomName = row.RowName }).Single();

string name = result.CustomName;
// etc.

Here you would have, for example,

class MyClass {
    public string CustomName { get; set; }
    // etc.
}
Jason
+1  A: 

You could try

var result = (from row in db.Table 
select new { CustomName = row.RowName }).Single();

Then you can access your property with

var foo = result.CustomName; // etc
Vanilj