其他分享
首页 > 其他分享> > Use anonymous type for LINQ based lists instead of var

Use anonymous type for LINQ based lists instead of var

作者:互联网

Use anonymous type for LINQ based lists instead of var

问题

I've LINQ requests that return anonymous types like:

var result = context.Table1.Select(
    x => new
    {
        col1 = x.col1,
        col2 = x.col2
    }).ToList();

That works fine, until I want to hand over the result to another function.

Than I need to specify exactly, what's type the list is. I cannot use var anymore.

But if I use

List< (string col1, string col2)> result ...

I get an "Cannot implicitly convert type ..." error.

Yes, I can create a new class for each entity. But is this the only way to handle it?

 

回答1

If you want to use a tuple type (that's what your (string col1, string col2) is) instead of an anonymous type (that's what your new { col1=x.col1...} is), you need another syntax:

List<(string col1, string col2)> list = context.Table1
    .Select( // linq to entities
    x => new
    {
        col1 = x.col1,
        col2 = x.col2
    })
    .ToArray() // go on with linq to objects for use of tuple types
    .Select(x => (col1: x.col1, col2: x.col2))
    .ToList();

ValueTuples aren't supported in Expression trees, so you might need to use a combination of anonymous types and tuple types in your query

See Tuple types, Choosing between anonymous and tuple types

 

 

 

标签:Use,based,col2,use,lists,col1,anonymous,type,types
来源: https://www.cnblogs.com/chucklu/p/16469088.html