C# 如何将两个模型列表合并为一个模型
请参阅下面的代码:C# 如何将两个模型列表合并为一个模型,c#,asp.net-mvc-3,linq,entity-framework,lambda,C#,Asp.net Mvc 3,Linq,Entity Framework,Lambda,请参阅下面的代码: public class NewsFilterModel { public CtArticleDetail ArticleDetail { get; set; } public PcPage Page { get; set; } } public IEnumerable<NewsFilterModel> GetNewsFilterModelByTagNames(string tagNames, int status) { var re
public class NewsFilterModel
{
public CtArticleDetail ArticleDetail { get; set; }
public PcPage Page { get; set; }
}
public IEnumerable<NewsFilterModel> GetNewsFilterModelByTagNames(string tagNames, int status)
{
var resultArticle = db.CtArticleDetail.Where(m => m.tagNames == tagNames);
var resultPage = db.PcPage.Where(m => m.tagNames == tagNames);
}
我以如下方式结束了这一切:
foreach (var item in pageResult)
{
resultList.Add(new NewsFilterModel { ArticleDetail = null, Page = item, Date = item.UpdatedOn.ToDateTime() });
}
foreach (var item in tempArticleList)
{
resultList.Add(new NewsFilterModel { ArticleDetail = item, Page = null, Date = item.LiveDate.ToDateTime() });
}
return resultList.AsEnumerable();
任何人都有更好的想法,请提供建议。很明显,您的
CtArticleDetail
和PcPage
没有关联,因此您需要更改您的型号
public class NewsFilterModel
{
public IEnmerable<CtArticleDetail> ArticleDetails { get; set; }
public IEnmerable<PcPage> Pages { get; set; }
}
可以使用Union组合结果集
var query1 = db.CtArticleDetail
.Where(a => a.tagNames.Equals(tagNames))
.Select(a => new NewsFilterModel() { ArticleDetail = a, Page = null });
var query2 = db.PcPage
.Where(a => a.tagNames.Equals(tagNames))
.Select(a => new NewsFilterModel() { ArticleDetail = null, Page = a });
var query3 = query1.Union(query2)
//.OrderBy(a => a.Date); -- Order here
;
您如何知道哪个
ctarticledeail
与哪个PcPage
相匹配?PcPage和ctarticledeail之间没有关系。所以我想我不需要知道。那么,给定一个ccarticledeail
和PcPage
的可枚举项,这些可枚举项是否应该有1:1的比例,并为每个集合创建一个模型?当集合的项目数不相等时会发生什么情况?我不确定您在这里想要实现什么。我正在尝试生成一个包含ctArticle和pcpage的列表页面。谢谢。这太完美了。但我需要返回IEnumerable,因为该模型列表页面有分页。该列表需要根据实时日期混合articledetail和pcpage。
public NewsFilterModel GetNewsFilterModelByTagNames(string tagNames, int status)
{
var resultArticle = db.CtArticleDetail.Where(m => m.tagNames == tagNames);
var resultPage = db.PcPage.Where(m => m.tagNames == tagNames);
var newsFilterModel = new NewFilterModel { ArticleDetails = resultArticle, Pages = resultPage };
return newsFilterModel;
}
var query1 = db.CtArticleDetail
.Where(a => a.tagNames.Equals(tagNames))
.Select(a => new NewsFilterModel() { ArticleDetail = a, Page = null });
var query2 = db.PcPage
.Where(a => a.tagNames.Equals(tagNames))
.Select(a => new NewsFilterModel() { ArticleDetail = null, Page = a });
var query3 = query1.Union(query2)
//.OrderBy(a => a.Date); -- Order here
;