【发布时间】:2015-01-22 22:30:44
【问题描述】:
如何使用实体框架获取 SQL Server 表或视图中每一列的类型?
我需要这样做之前我从表中获取所有数据,因为我希望允许用户过滤,例如,从实际从 SQL Server 检索数据之前的日期开始表/视图。
因此,如果我有一个带有发布日期的 Books 表,我想返回每一列(名称、发布者、发布日期)类型,以便事先进行过滤。我需要此代码来执行此操作,因为我不一定知道列,因为用户可能使用几个不同的表。
.NET Framework 类型就可以了,我不需要 SQL Server 类型...
下面是一些示例代码:
using (var ArgoEntities = new ARGOEntities())
{
//find the types here before the user performs the query so i can build the below code
var query = from b in ArgoEntities.tbl_Books
where b.PublishDate>[user specified date] //some date here the user enters
select b;
var book = query.First();
}
编辑:到目前为止,我只能通过获取表中的第一条记录来做到这一点,就像这样......
using (ARGOEntities ArgoEntities = new ARGOEntities())
{
//var fred = typeof(ARGOEntities).GetProperties();
//var fred = ArgoEntities.GetType().GetProperties();
var a=ArgoEntities.tbl_Books.FirstOrDefault();
var b = ObjectContext.GetObjectType(a.GetType());
var c=b.GetProperties();
}
但我再说一遍,我不想先获取任何记录。
【问题讨论】:
-
在 EF 中,参见示例 6:scip.be/index.php?Page=ArticlesNET24。在普通的 ADO.NET 中做起来要简单得多。
-
你甚至不需要说实话。因为在 EF 中,你有模型代表所有将要返回的数据。所以你可以只使用 typeof(SomeModel) 然后对带有 EF Column 属性标记的属性使用 Type.GetProperties() ,你将拥有所有属性以及它们的类型,用于填充表单 sql。
-
另请参阅 SQL Server 管理对象 (msdn.microsoft.com/en-us/library/ms162557.aspx),了解您确实想要检查表和列但又没有 EF 模型的情况。
-
@Ryios 你能举个例子吗?我不知道 SomeModel 是什么,请用我的例子。
标签: c# sql sql-server entity-framework metadata