2017-08-30 85 views
-1

我有兩個表中的數據選擇問題。這裏是我的代碼從多個表中選擇linq Web API

var results = (from voter in context.Voters 
          join voter2 in context.PollingShehias on voter.PollingStationId equals voter2.PollingStationId 
          join poll in context.PollingStations on voter.PollingStationId equals poll.Id 
          where voter2.WordId == Id 
          orderby voter.FirstName, voter.MiddleName, voter.LastName, voter.Gender ascending 
          select new 
          { 
           voter.Id, 
           voter.FirstName, 
           voter.MiddleName, 
           voter.LastName, 
           voter.DateBirth, 
           voter.Gender, 
           voter.ResidentialAddress, 
           poll.Name, 
           voter.VoterIDNumber, 
           voter.LifeStatus 
          }); 

return results; 

當我選擇新我收到以下錯誤

ExceptionMessage「:」無法轉換的類型爲「匿名類型爲鍵入「Cuf.infrastructure.Models.Voter」 。

+0

嗯,你正在選擇一個匿名類型。推測該方法期望返回'Voter'類型?您可以選擇該類型,或者從結果中創建該類型的新實例?你想做什麼?該方法應該返回什麼? – David

+0

方法返回的IEnumerable GetVoteer(INT ID) – user1554459

回答

0

更換

select new { ... }

select voter

但在這種情況下,您將無法返回poll.Name。可能你需要用PollName屬性創建一個新類並返回IEnumerable而不是IEnumerable<Voter>

如:

public class VoterWithPollName { 
    public long Id { get; set; } 
    public sitrng FirstName { get; set; } 
    public string MiddleName { get; set; } 
    public string LastName { get; set; } 
    public DateTime DateBirth { get; set; } 
    public sting Gender { get; set; } 
    public string ResidentialAddress { get; set; } 
    public string PollName { get; set; } 
    public long VoterIDNumber { get; set; } 
    public string LifeStatus { get; set; } 
} 

... 

// set method return type to IEnumerable<VoterWithPollName> 

var results = (from voter in context.Voters 
          join voter2 in context.PollingShehias on voter.PollingStationId equals voter2.PollingStationId 
          join poll in context.PollingStations on voter.PollingStationId equals poll.Id 
          where voter2.WordId == Id 
          orderby voter.FirstName, voter.MiddleName, voter.LastName, voter.Gender ascending 
          select new VoterWithPollName 
          { 
           Id = voter.Id, 
           FirstName = voter.FirstName, 
           MiddleName = voter.MiddleName, 
           LastName = voter.LastName, 
           DateBirth = voter.DateBirth, 
           Gender = voter.Gender, 
           ResidentialAddress = voter.ResidentialAddress, 
           PollName = poll.Name, 
           VoterIDNumber = voter.VoterIDNumber, 
           LifeStatus = voter.LifeStatus 
          }); 

return results; 
+0

poll.Name是從哪裏獲得的問題 – user1554459

+0

添加了一個例子 –

+0

BTW,'VoterIDNumber'應該是'根據指引 –

0

選民是類(模型)名稱

所以你寫代碼

voter in context.Voters 

選民是型號或類別的名字,但這次是一個對象

但類名和對象名相同,則匿名類型異常

所以你必須選民改變投票或任何名稱

如何避免多表名問題

。在寫代碼

在你MYDB上下文類,重寫以下方法

protected override void OnModelCreating(ModelBuilder modelBuilder) 
{ 
    modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 
    base.OnModelCreating(modelBuilder); 
} 
+0

感謝您的幫助 – user1554459