救命啊,玩数据转换的高手大侠给条明路吧.
本意是不希望每张数据表都定义个类,这样觉得太过繁琐,所以就有了下面的语句:IEnumerable<object> users = mdc.ExecuteQuery<object>("select * from userlist");
通过 foreach 可以循环出数据表的记录数.
但怎么也转换也读不到数据表字段的值.
还望高手指点阿!!!!!!! --------------------编程问答-------------------- 如果你只需要返回一个字段的值,可以这样:
IEnumerable<int> users = mdc.ExecuteQuery<int>("select ID from userlist");
如果你需要返回多列的值,就不能用object了,建议你需要定义一个类来实现:
IEnumerable<Users> users = mdc.ExecuteQuery<Users>("select * from userlist");--------------------编程问答-------------------- users是object类型,你要转为你的具体类型去访问其中的内容 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 写个通用的类,通过反射获取数据类型,再转换成List返回 --------------------编程问答--------------------
谢谢,谢谢,能不能写一段,或更具体点吗? --------------------编程问答-------------------- EF --------------------编程问答-------------------- 可以用dynamic 数据量大不建议使用
不过还是建议使用POCO --------------------编程问答-------------------- 以前 用DataTable,大家觉得没有表现出对象,纯属数据。
后来 用Entity实体类Model,表现直观,一个对象总觉得应该有行为,不只是属性。
再来 用Domain领域对象,有行为了,一个对象总算有自己的行为了,但是大家觉得它应该跟外界打交道...事件。
楼主直接用object,小伙伴们都惊呆了,表示为了省事,也不带这么整的。 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 返璞归真?
mdc.ExecuteQuery是个啥?
entity加反射吧 --------------------编程问答--------------------
--------------------编程问答--------------------
public static T TryGetObjectByKey<T>(this ObjectContext db, string entitySetName, string keyName, object keyValue) where T : EntityObject
{
object entity;
var key = new EntityKey(db.DefaultContainerName + "." + entitySetName, keyName, keyValue);
if (db.TryGetObjectByKey(key, out entity))
{
return (T)entity;
}
return default(T);
}
public static IQueryable<T> GetEntityQuery<T>(
this ObjectContext dataContext,
string entitySetName,
string includeTable,
Expression<Func<T, bool>> predicate)
where T : EntityObject
{
var dataQuery = dataContext.CreateQuery<T>(entitySetName);
IQueryable<T> query = dataQuery;
if (!string.IsNullOrEmpty(includeTable))
{
query = dataQuery.Include(includeTable);
}
if (predicate != null)
{
query = query.Where(predicate);
}
return query;
}
//其中的entitySetName就是实体集名称,如果没有重命名过,默认与数据库表名相同,也就是typeof(T).Name
public static bool Add<T>(this ObjectContext db, T item) where T : EntityObject
{
db.CreateObjectSet<T>().AddObject(item);
return db.SaveChanges() > 0; }
public static bool Delete<T>(this ObjectContext db, object itemId) where T : EntityObject
{
var entity = TryGetObjectByKey<T>(db, itemId);
if (entity != null)
{
db.CreateObjectSet<T>().EntitySet.Name.DeleteObject(entity);
return db.SaveChanges() > 0;
}
return false;
}
即使重合名过,4.0以上也可以直接用db.CreateObjectSet<T>().EntitySet.Name取得,用不着什么反射
CRUD就有了 --------------------编程问答-------------------- db.CreateObjectSet<T>().DeleteObject(entity); --------------------编程问答--------------------
读取记录数,这样啊
IEnumerable<int> users = mdc.ExecuteQuery<int>("select count(1) from userlist");
但是还是建议指定实体来完成
补充:.NET技术 , LINQ