2012-11-09 26 views
1

在我的Person表中是存儲位置ID的RequestedLocation列。這些ID與Locations表中的LocationId列匹配,Locations表中也包含LocatioName列中的文本位置名稱。LINQ to Entities使用MVC應用程序中的聯接方法進行查詢

在我看來,我需要在視圖中顯示字符串LocationName,並將Person模型傳遞給它。該視圖將顯示電子網格中的人員列表。正常情況下,它的效果很好,除了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. 

請幫幫忙,並感謝您閱讀我的文章。

哦,而且我只編了幾個月的編程,所以如果我對這一切都做錯了,請告訴我。我唯一需要堅持的是表格結構,因爲它是我正在更新的現有應用程序,更改位置或人員表格會產生很大的後果。

+1

您正在選擇一個匿名類'select new {foo = bar}',創建這些列表並嘗試返回該列表。你必須返回一個'NewApplicantViewModel'列表 –

回答

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你正在投影的匿名類型

select new 
       { 
        pl.RequestedVolunteerLocation = l.LocationName 

       }; 

。 ToList()會加載數據庫中的所有人員,因爲ToList()會立即執行查詢,而連接將在內存中執行(不在數據庫中)。

2

你得到一個錯誤的原因是相反,你需要投射NewApplicantViewModel

select new NewApplicantViewModel 
       { 
        RequestedVolunteerLocation = l.LocationName 

       };