使用ADO.Net Entity Framework从asp.net mvc中的两个表中检索数据

时间:2009-10-20 09:33:32

标签: asp.net asp.net-mvc entity-framework join

请仔细阅读我的问题并回复我。

我有两个表作为table1和table2。

在table1中,我将列作为AddressID(主键),Address1,Address2,City

在table2中,我将列作为ContactID(主键),AddressID(Foriegn Key),姓氏,名字。

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

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

在我的解决方案资源管理器的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 个答案:

答案 0 :(得分:1)

在Linq2Sql中,您的特定查询将返回一个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();
}