2009-06-20 64 views
1

基本上我会寻找实现这样的方法。有没有办法一般地返回来自表的所有记录与实体框架

IQueryAble GetQuery<T>(Entities db)或扩展方法Entities.GetQuery<T>()

这种方式,你可以做这样的事情

public IQueryable<T> GetAll() 
{ 
return yourEntityClasses.GetQuery<T>(); 
} 

这将返回一个SELECT * FROM查询表达式,显然从那里你可以做的排序addtional通用的方法,分页,其中的表达式等,这将使您不必为每个表重复这些方法的代码。我知道SubSonic3在这方面做得非常好,但是试图在我正在开发的EntityFramework项目中复制一些功能。我在EF中看到的只有CreateQuery和ObjectQuery,但这两者都要求您传递查询字符串,其中需要知道表名。

+1

请澄清 - 你的意思是EF或LINQ到SQL?您声明EF,但DataContext是LINQ到SQL!在LINQ到SQL的情况下,这只是返回ctx.GetTable () – 2009-06-20 15:50:31

+0

对不起,我的意思是EF - 我将修复datacontext参考 – 2009-06-20 15:52:19

回答

2

那么有可能得到需要自动放入CreateQuery方法的字符串。

基本上它只是string.Format("[{0}]",entitySetName);

如何获得实体集名称,假设您没有使用称为MEST的东西,大多数人不这样做,您可以使用我在this Tip中编写的一些函数来获取T的EntitySet,名称。

一旦你这样做,它应该是非常容易的为你写的扩展方法

public static IQueryable<T> GetAll<T>(this ObjectContext context) 
{ 
    var wkspace = context.MetadataWorkspace; 
    EntitySet set = wkspace 
     .GetEntitySets(wkspace.GetCSpaceEntityType<T>()) 
     .Single(); 
    return context.CreateQuery<T>(string.Format("[{0}]",set.Name); 
} 

请参阅使用其他功能上面的提示。

希望这有助于

亚历

相关问题