1

在我的 Person 表中有一个 RequestedLocation 列,它存储位置 ID。ID 与 Locations 表中的 LocationId 列相匹配,Locations 表在 LocatioName 列中也有文本位置名称。

在我看来,我需要在将 Person 模型传递给它的视图中显示字符串 LocationName。该视图将在 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.

请帮忙,感谢您阅读我的帖子。

哦,我只编程了几个月,所以如果我把这一切都搞错了,请告诉我。我唯一需要坚持的是表结构,因为它是我正在更新的现有应用程序,更改位置或人员表会产生很大的后果。

4

2 回答 2

2

您收到错误的原因是您正在投影匿名类型

 select new
                {
                    pl.RequestedVolunteerLocation = l.LocationName

                };

相反,您需要投影一个 NewApplicantViewModel

 select new NewApplicantViewModel
                {
                    RequestedVolunteerLocation = l.LocationName

                };
于 2012-11-09T18:42:35.997 回答
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 中)。

于 2012-11-09T19:11:56.650 回答