这里我试图通过使用LINQ连接两个表来获取列表,我想从ContestantRatings表中获取ContestantId。但它在行ContestantId = Convert.ToInt32(CR.ContestantId)
中显示错误,该错误表示:'LINQ to Entities无法识别方法Int32 ToInt32(System.Object)
方法,并且此方法无法转换为商店表达式。
。
任何帮助将受到高度赞赏。
以下是我的代码
public List<ContestantRating.Core.ViewModel.ContestantRatingVM> GetContestantRatingList()
{
var contestantRatingList = (from C in db.Contestants where C.IsActive==true
join CR in db.ContestantRatings on C.Id equals CR.ContestantId
select new ContestantRatingVM
{
ContestantId = Convert.ToInt32(CR.ContestantId),
FirstName = C.FirstName,
LastName = C.LastName,
DateOfBirth = C.DateOfBirth,
District = C.District.DistrictName,
Rating = CR.Rating,
RatingId = CR.Id,
RatedDate=CR.RatedDate
}).ToList().OrderByDescending(x => x.RatingId);
return contestantRatingList.ToList();
}
以下是我使用的视图模型ContestantRatingVM
public class ContestantRatingVM
{
public int ContestantId { get; set; }
public Nullable<int> HomeZoneId { get; set; }
public string District { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public Nullable<System.DateTime> DateOfBirth { get; set; }
public Nullable<bool> IsActive { get; set; }
public string Gender { get; set; }
public string PhotoUrl { get; set; }
public string Address { get; set; }
public int RatingId { get; set; }
public Nullable<decimal> Rating { get; set; }
public Nullable<System.DateTime> RatedDate { get; set; }
}
答案 0 :(得分:0)
问题是对Convert.ToInt32
的调用。 Linq to entities将Linq查询转换为数据库查询,因此它支持一组有限的操作。为了解决这个问题,您有几种选择。
一种选择是在数据库查询后进行转换:
public List<ContestantRating.Core.ViewModel.ContestantRatingVM> GetContestantRatingList()
{
var tempArray = (from c in db.Contestants where C.IsActive==true
join cr in db.ContestantRatings on C.Id equals CR.ContestantId
select new { C = c, CR = cr }).ToArray();
var contestantRatingList = from x in tempArray select new ContestantRatingVM
{
ContestantId = Convert.ToInt32(x.CR.ContestantId),
FirstName = x.C.FirstName,
// ...
}).ToList().OrderByDescending(x => x.RatingId);
return contestantRatingList.ToList();
}
通过调用ToArray
,您可以将查询发送到数据库,以便Linq to Enities不必处理Convert.ToInt32
。