1

私のPersonテーブルには、ロケーションIDを格納するRequestedLocation列があります。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 に答える