2009-10-20 69 views
0

请仔细阅读我的问题并回复我。使用ADO.Net实体框架从asp.net mvc中的两个表中检索数据

我有两个表格作为table1和table2。

在表1我为AddressID(主键),地址1,地址,市

表2中我有作为的ContactID(主键),AddressID(Foriegn键),姓氏,名字列列。

通过使用连接操作,我可以从两个表中检索数据。

我在我的MVC应用程序中创建了一个模型。我可以在实体编辑器中看到这两个表。

在我的解决方案资源管理器的ViewData文件夹中,我创建了两个类作为ContactViewData.cs和SLXRepository.cs。

在ContactViewData.cs,我有以下代码

public IEnumerable<CONTACT> contacts 
{ 
    get; 
    set; 
} 

在SLXRepository.cs,我有以下代码

public IEnumerable<CONTACT> GetContacts() 
{ 
    var contact = 
    (
     from c in context.CONTACT 
      join a in context.ADDRESS on c.ADDRESSID equals a.ADDRESSID 
      select new 
      { 
       a.ADDRESS1, 
       a.ADDRESS2, 
       a.CITY, 
       c.FIRSTNAME, 
       c.LASTNAME 
      } 
    ); 

    return contact; 
} 

我得到的返回类型错误

Cannot implicitly convert type 'System.Linq.IQueryable<AnonymousType#1>' to 'System.Collections.Generic.IEnumerable<SiennaSLX.Models.CONTACT>'. An explicit conversion exists (are you missing a cast?)

回答

1

在Linq2Sql中,您的特定查询将ret这是一个IQueryable对象。

你可以改变你的方法的返回类型的IQueryable

public IQueryable<CONTACT> contacts 
{ 
    get; 
    set; 
} 

public IQueryable<CONTACT> GetContacts() 
{ 
    var contact = 
    (
     from c in context.CONTACT 
      join a in context.ADDRESS on c.ADDRESSID equals a.ADDRESSID 
      select new 
      { 
       a.ADDRESS1, 
       a.ADDRESS2, 
       a.CITY, 
       c.FIRSTNAME, 
       c.LASTNAME 
      } 
    ); 

    return contact; 
} 

,或者你可以用.AsEnumerable()函数投你的返回值:

public IEnumerable<CONTACT> GetContacts() 
{ 
    var contact = 
    (
     from c in context.CONTACT 
      join a in context.ADDRESS on c.ADDRESSID equals a.ADDRESSID 
      select new 
      { 
       a.ADDRESS1, 
       a.ADDRESS2, 
       a.CITY, 
       c.FIRSTNAME, 
       c.LASTNAME 
      } 
    ); 

    return contact.AsEnumerable(); 
}