2017-08-30 48 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