我有两个收藏夹
var campaigns = new List<Campaigns>();
IEnumerable<CampaignsDb> campaignsFromDB = db.Campaigns
.Where(c => (c.IsDeleted == false))
.OrderBy(c => c.ScheduleTime)
.ToArray();
接下来,我要使用foreach()
从另一个集合中填充一个集合:
foreach (var campaign in campaignsFromDB)
{
campaigns.Add(new Campaigns { CampaignID = campaign.CampaignID, OwnerID = campaign.CreatedBy, AccountID = campaign.AccountID });
}
我可以使用Select()
linq方法代替foreach
循环吗?
答案 0 :(得分:0)
除非您需要原始的空白列表开头(例如首先添加其他广告系列),否则可以使用:
var campaigns = campaignsFromDB
.Select(c => new Campaigns
{
CampaignID = c.CampaignID,
OwnerID = c.CreatedBy,
AccountID = c.AccountID
})
.ToList();
但是,为了填充campaignsFromDB
,它仍将从数据库中获取完整的广告系列信息。如果您由于其他原因需要该数组,那很好,但是如果不需要,可以通过将投影放入查询中来提高效率:
var campaigns = db.Campaigns
.Where(c => !c.IsDeleted)
.OrderBy(c => c.ScheduleTime)
.Select(c => new Campaigns
{
CampaignID = c.CampaignID,
OwnerID = c.CreatedBy,
AccountID = c.AccountID
})
.ToList();
答案 1 :(得分:0)
是的,像这样:
var campaigns = db.Campaigns
.Where(c => !c.IsDeleted)
.OrderBy(c => c.ScheduleTime)
.Select(c => new Campaigns
{
CampaignID = c.CampaignID,
OwnerID = c.CreatedBy,
AccountID = c.AccountID
})
.ToList();
答案 2 :(得分:0)
是的。只是
var campaigns = db.Campaigns
.Where(c => (c.IsDeleted == false))
.OrderBy(c => c.ScheduleTime)
.Select(c => new Campaigns { CampaignID = c.CampaignID, OwnerID = c.CreatedBy, AccountID = c.AccountID })
.ToList();
或者如果您还需要数据库中的源集
var campaignsFromDB = db.Campaigns
.Where(c => (c.IsDeleted == false))
.OrderBy(c => c.ScheduleTime)
.ToArray();
var campaigns = campaignsFromDB
.Select(c => new Campaigns { CampaignID = c.CampaignID, OwnerID = c.CreatedBy, AccountID = c.AccountID })
.ToList();