C# MVC-指定的强制转换无效

C# 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

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
    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();