C# 返回列表而不是IQueryable
我有以下的表达:C# 返回列表而不是IQueryable,c#,linq,C#,Linq,我有以下的表达: var a = DBContext.Summaries .Where(fs => fs.PersonID == id) .Select(s => s.ChildAccounts); 它返回类型为的对象: IQueryable<ICollection<ChildAccount>> IQueryable 但是,我需要返回类型为: List<ChildAccount> 列表 我似乎无法正确理解语法。我假设在某个地方会有一
var a = DBContext.Summaries
.Where(fs => fs.PersonID == id)
.Select(s => s.ChildAccounts);
它返回类型为的对象:
IQueryable<ICollection<ChildAccount>>
IQueryable
但是,我需要返回类型为:
List<ChildAccount>
列表
我似乎无法正确理解语法。我假设在某个地方会有一个ToList(),但在我尝试过的每个地方,我都会得到一个不同的、不正确的返回类型
有人能建议正确的方法吗?调用
SelectMany
,它基本上将多个结果列表连接成一个,而不是Select
,然后调用ToList
var a = DBContext.Summaries
.Where(fs => fs.PersonID == id)
.SelectMany(s => s.ChildAccounts)
.ToList();
调用
SelectMany
,它基本上将多个结果列表连接成一个,而不是Select
,然后调用ToList
var a = DBContext.Summaries
.Where(fs => fs.PersonID == id)
.SelectMany(s => s.ChildAccounts)
.ToList();
复制粘贴
a=DBContext.Summaries.Where(fs=>fs.PersonID==id)。选择(s=>s.ChildAccounts.ToList();
因此,您可以使用id条件获取摘要
,并选择所需的列
如果需要多列,可以键入
var a=DBContext.Summaries.Where(fs=>fs.PersonID==id)。选择(s=>newsummaries{
ChildAccounts=s.ChildAccounts,
....
}).ToList() 复制并粘贴
a=DBContext.Summaries.Where(fs=>fs.PersonID==id)。选择(s=>s.ChildAccounts.ToList();
因此,您可以使用id条件获取摘要
,并选择所需的列
如果需要多列,可以键入
var a=DBContext.Summaries.Where(fs=>fs.PersonID==id)。选择(s=>newsummaries{
ChildAccounts=s.ChildAccounts,
....
}).ToList()
以上代码应给出您的列表
。在这里,SelectMany
可展平返回列表列表的查询。例如,您可以看到
以上代码应给出您的
列表
。在这里,SelectMany
可展平返回列表列表的查询。例如,您可以看到。虽然SelectMany
的工作是将集合展平,并用IEnumerable
形成一个IEnumerable
,但如果您需要细粒度控制,并希望应用自定义逻辑,请按如下所示使用Aggregate
:
var a = DBContext.Summaries
.Where(fs => fs.PersonID == id)
.Select(s => s.ChildAccounts)
.Aggregate(new List<ChildAccounts>(),
(x,y) =>
{
x.AddRange(y);
return x;
});
var a=DBContext.Summaries
.Where(fs=>fs.PersonID==id)
.选择(s=>s.ChildAccounts)
.Aggregate(新列表(),
(x,y)=>
{
x、 AddRange(y);
返回x;
});
以下是重要的细节:
new List()
是最终集合的空种子数据。如果需要,我们甚至可以使用第一个元素作为种子数据,并从第二个元素开始聚合x,y
参数是ICollection
,表示外部IQueryable
的连续元素,并在每次迭代中合并,从而替换下一次执行的数据种子列表
时进行自定义处理,但在最终结果上,聚合将使用第三个参数Func resultSelector
,该参数可用于更改最终集合列表
,所以所有中间结果都是列表
,因为我们返回的是聚合结果虽然
SelectMany
的工作是将集合展平,并在IEnumerable
中形成一个IEnumerable
,但如果您需要细粒度控制并希望应用自定义逻辑,则使用聚合
,如下所示:
var a = DBContext.Summaries
.Where(fs => fs.PersonID == id)
.Select(s => s.ChildAccounts)
.Aggregate(new List<ChildAccounts>(),
(x,y) =>
{
x.AddRange(y);
return x;
});
var a=DBContext.Summaries
.Where(fs=>fs.PersonID==id)
.选择(s=>s.ChildAccounts)
.Aggregate(新列表(),
(x,y)=>
{
x、 AddRange(y);
返回x;
});
以下是重要的细节:
new List()
是最终集合的空种子数据。如果需要,我们甚至可以使用第一个元素作为种子数据,并从第二个元素开始聚合x,y
参数是ICollection
,表示外部IQueryable
的连续元素,并在每次迭代中合并,从而替换下一次执行的数据种子列表
时进行自定义处理,但在最终结果上,聚合将使用第三个参数Func resultSelector
,该参数可用于更改最终集合列表
,所以所有中间结果都是列表
,因为我们返回的是聚合结果@谢谢,我就是这么想的needed@jmcilhinney谢谢,这就是我需要的请解释你的代码。为什么它是这样工作的?“复制粘贴”不是很有建设性。OP将只学习复制和粘贴,仅此而已。请解释您的代码。为什么它是这样工作的?“复制粘贴”不是很有建设性。OP将只学习复制和粘贴,仅此而已。您没有尝试将
.ToList()
放在末尾吗?是的,我做了,但不起作用。为什么它对您不起作用,但您已将其标记为正确答案?它们应该是关于在某些位置选择多少作品的参考副本。您没有尝试将.ToList()放在后面吗
最后?是的,我做了,但那不起作用。为什么它对你不起作用,而你已经将它标记为正确答案?它们应该是关于在某些地方选择多少作品的参考副本。。