如何将在foreach中执行的LINQ语句的结果存储到变量中以供将来使用
本文关键字:变量 将来 存储 语句 foreach 执行 LINQ 结果 | 更新日期: 2023-09-27 18:13:53
我需要将满足特定条件的多个值存储到lstfile中。为此,我声明:
List<AlbumPhotos> lstfile = new List<AlbumPhotos>();
并使用下面的代码来获取刚刚安装的记录的id在T_SelectionListDetails:
idList = (from s in context.T_SelectionListDetails
orderby s.ID descending
select new AlbumPhotos { ID= s.ID }).Take(i).ToList();
,其中I是保存当前记录数量的变量。然后我需要加入T_SelectionListDetails表与T_UserAlbumDetails .以下代码用于此,它将返回多个结果,但我不能得到整个结果,但只有一个。
foreach(var item in idList)
{
lstfile = (from s in context.T_SelectionListDetails
join p in context.T_UserAlbumDetails on s.UserAlbumDetails_ID equals p.ID
where s.ID == item.ID
select new AlbumPhotos
{
virtualPath = p.VirtualPath,
ID = s.ID
}).ToList();
// lstfile.Add(t);
}
如何获得完整的结果?
您应该使用AddRange
将一个集合的元素添加到另一个列表的末尾。
foreach(var item in idList)
{
var lstfile1 = (from s in context.T_SelectionListDetails
join p in context.T_UserAlbumDetails on s.UserAlbumDetails_ID equals p.ID
where s.ID == item.ID
select new AlbumPhotos
{
virtualPath = p.VirtualPath,
ID = s.ID
}).ToList();
lstfile.AddRange(lstfile1);
}
你在foreach循环中分配lstfile,它将在每次新的迭代中替换旧的值。在循环之后,它将包含foreach循环最后一次迭代中赋值的值。
你最好更新你的代码:
foreach(var item in idList)
{
var lstRows = (from s in context.T_SelectionListDetails
join p in context.T_UserAlbumDetails on s.UserAlbumDetails_ID equals p.ID
where s.ID == item.ID
select new AlbumPhotos
{
virtualPath = p.VirtualPath,
ID = s.ID
}).ToList();
lstfile.AddRange(lstRows);
}
我想你想要的是一次传递所有的ID
,而不是循环通过它。
lstfile = (from s in context.T_SelectionListDetails
.Where(c => idList.Select(n => n.ID)
.Contains(c.ID))
join p in context.T_UserAlbumDetails on
s.UserAlbumDetails_ID equals p.ID
select new AlbumPhotos
{
virtualPath = p.VirtualPath,
ID = s.ID
}).ToList();