当前位置:编程学习 > C#/ASP.NET >>

救命啊,玩数据转换的高手大侠给条明路吧.

本意是不希望每张数据表都定义个类,这样觉得太过繁琐,所以就有了下面的语句: 
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返回 --------------------编程问答--------------------
引用 4 楼 hdhai9451 的回复:
写个通用的类,通过反射获取数据类型,再转换成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
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,