0

我正在尝试获取用户登录但收到此错误的结果:

“无法比较 'System.Linq.IQueryable`1' 类型的元素。仅支持原始类型、枚举类型和实体类型。”

这是我在索引操作中应用的查询:

var viewModel = new PointsViewModel();
            viewModel.Point = db.Point.ToList();
            viewModel.Redeem = db.Redeem.ToList();


            TempData["UserPoints"] = null;
            var usrname = (from a in db.Instructors
                           where a.Email == User.Identity.Name
                           select new { a.PersonID });

            if (usrname.Count().Equals(0))
            {
                TempData["UserPoints"] = "You have not earn any points yet.";
                return View();
            }

            viewModel.instructor = db.Instructors
                   .Where(i => i.PersonID.Equals(usrname))// if I directly insert id here then it works properly but I don't want direct inserts
                   .Single();
            PopulateAssignedPointData(viewModel.instructor);
            return View(viewModel);

请帮我解决这个问题...我无法在谷歌上找到任何解决方案

4

2 回答 2

0

尝试使用这个:

viewModel.instructor = db.Instructors
               .Where(i => usrname.Any(u => u.PersonID == i.PersonID))
               .Single();
于 2013-07-26T11:48:58.387 回答
0

这是因为您将usrname作为参数传递给另一个查询。usrname是一个查询,而不是一个,因此您需要从查询中检索一个值(在这种情况下,通过使用First(),但Single()如果您愿意,您也可以轻松使用),然后才能将其用作另一个查询中的参数。我建议进行以下更改:

if (!usrname.Any())
{
    TempData["UserPoints"] = "You have not earn any points yet.";
    return View();
}

var personId = usrname.First();

viewModel.instructor = db.Instructors
    .Where(i => i.PersonID.Equals(personId))
    .Single();

我也改成usrname.Count().Equals(0)因为!usrname.Any()它更惯用(它将使用existsSQL 中的关键字,而不是count

于 2013-07-26T11:50:24.120 回答