Asp.net 从ObjectDataSource业务类返回自定义可枚举类型

Asp.net 从ObjectDataSource业务类返回自定义可枚举类型,asp.net,ienumerable,objectdatasource,Asp.net,Ienumerable,Objectdatasource,这个问题可能看起来很基本,但我对C的这些方面真的很陌生。我道歉 我正在开发一个ASP.NET 4 Web表单应用程序 这是我的书桌 书 书号主键 书名 作者 主体 复制品 这是我的作者表 著者 作者 作者姓名 主题表 主题 主观性 主题名 我已经从数据库中的这些表生成了ADO.NET模型类 我已经为我的图书模型创建了一个包含CRUD方法的业务类,这样我就可以使用ObjectDataSource对图书执行CRUD操作 这是我的商务课的get方法 public static IEnumerable&

这个问题可能看起来很基本,但我对C的这些方面真的很陌生。我道歉

我正在开发一个ASP.NET 4 Web表单应用程序

这是我的书桌

书 书号主键 书名 作者 主体 复制品

这是我的作者表

著者 作者 作者姓名

主题表

主题 主观性 主题名

我已经从数据库中的这些表生成了ADO.NET模型类

我已经为我的图书模型创建了一个包含CRUD方法的业务类,这样我就可以使用ObjectDataSource对图书执行CRUD操作

这是我的商务课的get方法

public static IEnumerable<Book> GetAllBooks()
    {
        var result = from author in db.Authors
                 join book in db.Books on new { AuthorID = author.AuthorID } equals new { AuthorID = book.AuthorID }
                 join subject in db.Subjects on new { SubjectID = book.SubjectID } equals new { SubjectID = subject.SubjectID }
                 select new { BookID = book.BookID, BookName = book.BookName, Copies = book.Copies, AuthorName = author.AuthorName };


        return result.ToList();
    }
此方法的返回类型为IEnumerable,但由于我现在返回的是匿名对象列表,因此此返回类型无效

我知道我可以通过扩展Book模型类,使其包含AuthorName和SubjectName,然后使用该模型类来解决这个问题,但我希望避免编写更多代码

是否有其他方法可以返回此匿名对象列表?

如果确实需要匿名对象,您可以直接返回IEnumerable而不是IEnumerable,但这是一个错误的方向。当在代码中进一步使用GetAllBooks方法时,您将不知道这些对象具有什么属性,您必须返回到业务代码以确保——甚至更糟的是:编译器根本无法帮助您捕获打字错误。尝试坚持使用强类型对象。

您可以:

创建仅包含以下属性的类:

公共类图书模型 { int BookID{get;set;} 字符串BookName{get;set;} ?副本{get;set;} 字符串AuthorName{get;set;} }

用它来代替Anomium。 2.在Book实体类中为作者和主题创建导航属性,并使用Include而不是Join从db获取其数据。比如:

var result  = db.Books.Include(b=>b.Author).Include(b=>b.Subject);

return result;