C# MVC-指定的强制转换无效
MVC新手,检查了很多变通方法。。没有帮助: 这段代码是在模型存储库中编写的,它返回一个列表,我可以将该列表返回到ViewIndexC# MVC-指定的强制转换无效,c#,linq,entity-framework,C#,Linq,Entity Framework,MVC新手,检查了很多变通方法。。没有帮助: 这段代码是在模型存储库中编写的,它返回一个列表,我可以将该列表返回到ViewIndex IList<AccessArticles> publisherList = (from aa in db.AccessArticles join u in db.Users on aa.UserId equals u.id join a in db.Articles on aa.ArticleId equals a.id
IList<AccessArticles> publisherList = (from aa in db.AccessArticles
join u in db.Users on aa.UserId equals u.id
join a in db.Articles on aa.ArticleId equals a.id
where u.id == id
orderby a.title
select new
{
UserName = u.username,
ArticleTitle = a.title,
AccessArticlesId = aa.AccessArticlesId,
ArticleId = aa.ArticleId,
UserId = aa.UserId
})
.AsEnumerable()
.Select
(x=> new AccessArticles
{
AccessArticlesId = x.AccessArticlesId,
UserId = x.UserId,
UserName = x.UserName,
ArticleTitle = x.ArticleTitle
}).ToList();
模型
这将返回具有以下所述属性的匿名类型集合。如果需要使用现有类,请确保它不是EF用于表示实体的类,除非它直接匹配。如果是这种情况,那么您应该能够用select aa替换下面的select new,并让它返回EF为您构建的实体模型列表
var publisherList = (from aa in db.AccessArticles
join u in db.Users on aa.UserId equals u.Id
join a in db.Articles on aa.ArticleId equals a.Id
where u.Id == userId
orderby a.Title
select new
{
UserName = u.UserName,
ArticleTitle = a.Title,
AccessArticleId = aa.AccessArticlesId,
UserId = aa.UserId
}).ToList();
编辑后可直接选择EF实体
var publisherList = (from aa in db.AccessArticles
join u in db.Users on aa.UserId equals u.Id
join a in db.Articles on aa.ArticleId equals a.Id
where u.Id == userId
orderby a.Title
select aa).ToList();
这将触发编译错误,因为返回类型不匹配。我猜应该是List你应该向我们展示你在这段代码中使用的类的代码你想做什么?从EF集合创建新的AccessArticles列表?是的,用户可以在列表视图中访问的文章列表。AccessArticles是描述表的EF类型吗?我可能有点不对劲,但上次使用EF时,AccessArticles应该是包含AccessArticle实体的表。是的,AccessArticles是一个映射表,它包含userid和articleid以映射用户表和项目表。映射是在.dbmlhanks-Barry中完成的,但不清楚到底是什么问题。如果我这样做了,请选择aa{},它会给出错误,但会与Select new ACCESS ARTICTIONS一起工作。**我的回答可能不准确,因为我刚刚开始理解MVC。谢谢你想看一些特定的代码/表结构来了解更多,我分享。
public ActionResult Index(int? id)
{
int UserId = 0;
if (id != null)
{
UserId = Convert.ToInt32(id);
}
IAccessArticlesRepository AccessRepository = new AccessArticlesRepository();
//int count = AccessRepository.SearchByUserId(UserId).Count();
List_AccessArticles = AccessRepository.SearchByUserId(UserId);
return View(List_AccessArticles);
}
namespace theSiteCMS.Models
{
public partial class AccessArticles
{
public string ArticleTitle { get; set; }
public string UserName { get; set; }
}
}
I did some changes taking some reference:
----------
Repository
----------
public IQueryable<AccessArticles> SearchByUserId(int id)
{
var setArticles = (from aa in db.AccessArticles
join u in db.Users on aa.UserId equals u.id
join a in db.Articles on aa.ArticleId equals a.id
where u.id == id
orderby a.title
select new AccessArticles
{
UserName= u.username,
ArticleTitle = a.title,
AccessArticlesId= aa.AccessArticlesId,
ArticleId = aa.ArticleId,
UserId = aa.UserId
});
return setArticles;
}
--------------
Controller
--------------
public ActionResult Index(int? id)
{
int UserId = 0;
if (id != null)
{
UserId = Convert.ToInt32(id);
}
IAccessArticlesRepository AccessRepository = new AccessArticlesRepository();
var userwisearticles = AccessRepository.SearchByUserId(UserId);
return View(userwisearticles);
}
Error:
In Index.aspx page:
<% foreach (var item in Model) { %>
Highlight on 'Model' - Explicit construction of entity type 'theSiteCMS.Models.AccessArticles' in query is not allowed.
var publisherList = (from aa in db.AccessArticles
join u in db.Users on aa.UserId equals u.Id
join a in db.Articles on aa.ArticleId equals a.Id
where u.Id == userId
orderby a.Title
select new
{
UserName = u.UserName,
ArticleTitle = a.Title,
AccessArticleId = aa.AccessArticlesId,
UserId = aa.UserId
}).ToList();
var publisherList = (from aa in db.AccessArticles
join u in db.Users on aa.UserId equals u.Id
join a in db.Articles on aa.ArticleId equals a.Id
where u.Id == userId
orderby a.Title
select aa).ToList();