在我的Person表中是一个存储位置ID的RequestedLocation列。这些ID与Locations表中的LocationId列匹配,Locations表还具有LocatioName列中的文本位置名称。
在我看来,我需要在视图中显示字符串LocationName,并将Person模型传递给它。该视图将显示telerik网格中的人员列表。除了RequestedLocation列是全部整数之外,它的工作原理很好。
我使用包含LINQ查询的方法填充所有网格。以下是目前有效的方法:
public List<Person> GetPeople()
{
var query = from p in _DB.Person.ToList()
select p;
return query.ToList();
}
这是常规的SQL查询,我需要转换为LINQ:
SELECT ApplicantID
,FirstName
,LastName
,MiddleName
,DateofBirth
,Gender
,RequestedVolunteerRole
,RequestedVolunteerLocation
,l.LocationName
FROM Form.Person p
JOIN dbo.Location l ON p.RequestedVolunteerLocation = l.LocationID
Order BY ApplicantID
这是我尝试转换为LINQ:
public List<NewApplicantViewModel> GetPeople()
{
var query = from pl in _DB.Person.ToList()
join l in _Elig_DB.Locations.ToList() on pl.RequestedVolunteerLocation equals l.LocationID
select new
{
pl.RequestedVolunteerLocation = l.LocationName
};
return query.ToList();
我从中获得的错误数量很多,但大多数都是:
Cannot convert from type Annonymous to Type List<NewAPplicantModel>
和
Invalid annonymous type declarator.
请帮忙,谢谢你阅读我的帖子。
哦,而且我只编程了几个月,所以如果我说的都错了,请告诉我。我必须坚持的是表结构,因为它是我正在更新的现有应用程序,更改位置或人员表会产生很大的后果。
答案 0 :(得分:2)
您收到错误的原因是您正在投射匿名类型
select new
{
pl.RequestedVolunteerLocation = l.LocationName
};
相反,您需要投影NewApplicantViewModel
select new NewApplicantViewModel
{
RequestedVolunteerLocation = l.LocationName
};
答案 1 :(得分:2)
public List<NewApplicantViewModel> GetPeople()
{
var query = from pl in _DB.Person
join l in _Elig_DB.Locations on pl.RequestedVolunteerLocation
equals l.LocationID
select new NewApplicantViewModel
{
LocationName = l.LocationName,
otherPropery = p.Property
};
return query.ToList();
}
小心调用_DB.Person.ToList(),它将从DB加载所有人,因为ToList()会立即执行查询,并且连接将在内存中执行(而不是在DB中)。