linq 如何将未知的IQueryable结果存储到列表中?

8zzbczxx  于 2022-12-20  发布在  其他
关注(0)|答案(2)|浏览(132)

LINQ工作正常,如下所示。出于解决问题的目的,缩短了查询。

var query = (
             from p in DBContext.Products
             from pp in DBContext.Pricing
             select new { p,pp }
            )

现在假设我想要这个查询的列表,例如:

var query = List<IQueryable<dynamic>>(); //this is what I assumed the return type would be but no.
for(int = 0; i<5;i++)
{
    query = (from .... select new {p,pp})
}

那么,什么是正确的返回类型查询存储查询?

ljsrvy3e

ljsrvy3e1#

因为匿名类型没有公共名称,所以不可能直接使用匿名类型静态声明变量,但是可以使用类型推断和var关键字让编译器推断正确的类型。
给定一些扩展方法:

public static class ObjectExt {
    public static IQueryable<T> AsIQueryableOfType<T>(this T obj) => default(IQueryable<T>);
    public static List<T> AsListOfType<T>(this T obj) => default(List<T>);
}

然后你可以通过传入匿名类型来为任何匿名类型声明IQueryable<T>List<T>,因为匿名类型属性不能被声明,只能被初始化,你必须为属性赋一个合适的表达式,我推荐使用default

var ListOfQueries = new { p = default(Product), pp = default(Pricing) }
                        .AsIQueryableOfType()
                        .AsListOfType();

for(int i = 0; i < 5; ++i) {
    ListOfQueries.Add(from .... select new {p,pp});
}
tzcvj98z

tzcvj98z2#

试试这个。

var linqdata = new List<Tuple<DBContext.Products,DBContext.Pricing>>();

相关问题