MVC-指定演员表无效

时间:2014-11-19 06:05:30

标签: c# linq entity-framework

MVC的新手,检查了很多解决方法..没有帮助:

此代码编写在模型存储库中,该存储库返回一个列表,我可以返回到View(索引)

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

我得到的错误是指定演员表无效。

请建议一个出路或更好的方法来获得相同的效果。

谢谢

代码参考 -

界面:

List<AccessArticles> SearchByUserId(int UserId);

存储库:

public List<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
            }).ToList();

            return setArticles;


        }

控制器

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.

1 个答案:

答案 0 :(得分:0)

这将返回具有下述属性的匿名类型集合。如果您需要使用现有类,请确保它不是您的EF用于表示您的实体的类,除非它直接匹配。如果是这种情况,那么您应该能够用select new替换下面的select aa并让它返回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<AccessArticle>