日期:2014-05-20  浏览次数:20924 次

C#可以编写一个方法对T表查询并返回List<T>吗
用的是 linq to entities 。
首先假定我的数据库内有10个表,我想编写这样几个方法:
public List<T> GetXXX<T>(???);
public int AddNewXXX<T>(T obj);
public int ModifyXXX<T>(T obj);
public int DeleteXXX<T>(T obj);

然后我只需要在调用的时候写上T的实际类型,我就能用这个4个方法查询、添加、修改、删除10个表的所有数据。

这样的方法能实现不?

???的内容个人理解应该是:Func<T,bool> func之类的东西吧……

重要的是,我如何用这个T来获取数据库内对应的表?只有获取到表什么之类的东西才能查询添加修改删除吧?

------解决方案--------------------
不可以。必须先映射哦。
------解决方案--------------------
你的实体类是不确定的,要用到linq的动态查询
应该可以
------解决方案--------------------
给你个思路:
让所有的实体类继承自一个基类。
基类提供一个虚方法,该方法反射当前类型的所有非复杂类型的成员,将属性名认作是表名,然后存取属性值就可以了。
最好是自定义一些特性(Attribute)
比如 PrimaryKey,ForeKey,Identity之类的。
派生类可以重写其基类的这个方法,以实现某些特殊需要。没有重写就使用基类的默认实现,不过反射比较消耗资源。
------解决方案--------------------
楼主说的是不是类似 EasyFramework 之类的东西,可以参考这方面的知识。
------解决方案--------------------
可以,首先你要让你的这些表类 T 都实现接口 I 而接口I则规定了AddNew(), Modify() ,Delete方法()。而你的public int AddNewXXX<T>(T obj);
public int ModifyXXX<T>(T obj);
public int DeleteXXX<T>(T obj);
这些只要直接调用t.addnew()就行了。

------解决方案--------------------
你这种已知表结构的情况,不适用工厂模式,用不着去搞反射,搞反射是为了处理表结构不明确的情况。
------解决方案--------------------
其实可以用反射