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

jamsunyue 2013-09-04 02:05:45
本意是不希望每张数据表都定义个类,这样觉得太过繁琐,所以就有了下面的语句:
IEnumerable<object> users = mdc.ExecuteQuery<object>("select * from userlist");

通过 foreach 可以循环出数据表的记录数.
但怎么也转换也读不到数据表字段的值.
还望高手指点阿!!!!!!!
...全文
9266 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
EnForGrass 2013-09-04
  • 打赏
  • 举报
回复
读取记录数,这样啊 IEnumerable<int> users = mdc.ExecuteQuery<int>("select count(1) from userlist"); 但是还是建议指定实体来完成
  • 打赏
  • 举报
回复
db.CreateObjectSet<T>().DeleteObject(entity);
  • 打赏
  • 举报
回复

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就有了
  • 打赏
  • 举报
回复

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
  • 打赏
  • 举报
回复
返璞归真? mdc.ExecuteQuery是个啥? entity加反射吧
claymore1114 2013-09-04
  • 打赏
  • 举报
回复
以前 用DataTable,大家觉得没有表现出对象,纯属数据。 后来 用Entity实体类Model,表现直观,一个对象总觉得应该有行为,不只是属性。 再来 用Domain领域对象,有行为了,一个对象总算有自己的行为了,但是大家觉得它应该跟外界打交道...事件。 楼主直接用object,小伙伴们都惊呆了,表示为了省事,也不带这么整的。
jakey188 2013-09-04
  • 打赏
  • 举报
回复
可以用dynamic 数据量大不建议使用 不过还是建议使用POCO
灬浪子灬 2013-09-04
  • 打赏
  • 举报
回复
EF
jamsunyue 2013-09-04
  • 打赏
  • 举报
回复
引用 4 楼 hdhai9451 的回复:
写个通用的类,通过反射获取数据类型,再转换成List返回
谢谢,谢谢,能不能写一段,或更具体点吗?
Andy__Huang 2013-09-04
  • 打赏
  • 举报
回复
写个通用的类,通过反射获取数据类型,再转换成List返回
bdmh 2013-09-04
  • 打赏
  • 举报
回复
users是object类型,你要转为你的具体类型去访问其中的内容
q107770540 2013-09-04
  • 打赏
  • 举报
回复
如果你只需要返回一个字段的值,可以这样:
IEnumerable<int> users = mdc.ExecuteQuery<int>("select ID from userlist");
如果你需要返回多列的值,就不能用object了,建议你需要定义一个类来实现:
IEnumerable<Users> users = mdc.ExecuteQuery<Users>("select * from userlist");

8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧