首页 新闻 会员 周边

EF4.1+MVC3 CodeFirst 如何获取某个表中的部分字段值

0
悬赏园豆:10 [已解决问题] 解决于 2012-05-28 11:53

如题

比如 我有个新闻表

id,title,body,createtime,author,click

使用ef4.1 仅仅读取 id,title,createtime 并显示在页面上。

   public static List<NewInfo> GetHotNews()
        {
            List<NewInfo> list;
            list = (from n in db.NewInfoes
                    where n.IsTop == 1
                    orderby n.PublishTime descending
                    select new
                    {
                        Title = n.Title,
                        NewID = n.NewID,
                        PublishTime = n.PublishTime
                    }).ToList();
            return list;
        }

 

很明显, 匿名方法生产的对象和 list 中的对象格式不同,因为少了部分字段。

问下大家,这种情况,应该如何处理

 

 

PS:

用ef的童鞋,如果避免一次性读取大类型数据造成的数据污染??

西安-DB的主页 西安-DB | 初学一级 | 园豆:4
提问于:2012-05-25 12:04
< >
分享
最佳答案
0

需要将匿名类型转换为NewsInfo,代码如下:

public static List<NewInfo> GetHotNews()
        {
            List<NewInfo> list;
            list = (from n in db.NewInfoes
                    where n.IsTop == 1
                    orderby n.PublishTime descending
                    select new 
                    {
                        Title = n.Title,
                        NewID = n.NewID,
                        PublishTime = n.PublishTime
                    })
       .ToList()
       .Select(n => new NewInfo
                    {
                        Title = n.Title,
                        NewID = n.NewID,
                        PublishTime = n.PublishTime
                    });
            return list;
        }
收获园豆:10
dudu | 高人七级 |园豆:30948 | 2012-05-26 20:50

谢谢 dudu,周一去试试。感谢。。。。很荣幸  园主能来回答我的问题。感谢哈~~嘎嘎。

西安-DB | 园豆:4 (初学一级) | 2012-05-26 21:01
public static List<View_jdzx_memorial_Info> Memorial_history_today()
        {
            int memorial_history_day = DateTime.Now.Day;
            int memorial_history_month = DateTime.Now.Month;
            using (UBIQ_DB_JDZXContext db = new UBIQ_DB_JDZXContext())
            {
                List<View_jdzx_memorial_Info> memorial_history_today = (from m in db.View_jdzx_memorial_Info
                                                                        where m.isDelete == 0 && m.IsOk == 0
                                                                        orderby m.dead_day == memorial_history_day & m.dead_month == memorial_history_month
                                                                        select new
                                                                        {
                                                                            MemorialCode = m.MemorialCode,
                                                                            HeadPhoto = m.HeadPhoto,
                                                                            FirstName = m.FirstName,
                                                                            LastName = m.LastName,
                                                                            Biography = m.Biography
                                                                        }).Take(2)
                                                                        .ToList()
                                                                        .Select(m => new View_jdzx_memorial_Info
                                                                        {
                                                                            MemorialCode = m.MemorialCode,
                                                                            HeadPhoto = m.HeadPhoto,
                                                                            FirstName = m.FirstName,
                                                                            LastName = m.LastName,
                                                                            Biography = m.Biography
                                                                        });
                //select new {  m.MemorialCode,m.HeadPhoto,m.FirstName,m.LastName,m.Biography }).Take(2).ToList();
                return memorial_history_today;
            }

        }

@dudu  dudu 您好,以上是我修正过的代码,.Select 部分带红色波浪线,提示 缺少显示转换。初次用EF,希望您不要嫌麻烦。谢谢。

西安-DB | 园豆:4 (初学一级) | 2012-05-28 10:03

错误 1 无法将类型“System.Collections.Generic.IEnumerable<UBIQ.CemeterySite.Entities.View_jdzx_memorial_Info>”隐式转换为“System.Collections.Generic.List<UBIQ.CemeterySite.Entities.View_jdzx_memorial_Info>”。存在一个显式转换(是否缺少强制转换?) E:\zhouzhaokun\Project\Cemetery\trunk\UBIQ.CemeterySite\UBIQ.CemeterySite\Controllers\DataHelper.cs 58 75 UBIQ.CemeterySite

西安-DB | 园豆:4 (初学一级) | 2012-05-28 10:20

@周兆坤: 在.Select之后加上.ToList()

dudu | 园豆:30948 (高人七级) | 2012-05-28 10:56
其他回答(3)
0

重新建立一個 類。

無限遐想 | 园豆:3740 (老鸟四级) | 2012-05-25 12:25

有没有“聪明”一些的办法呢?亲

支持(0) 反对(0) 西安-DB | 园豆:4 (初学一级) | 2012-05-25 14:10

@周兆坤: List<NewInfo> 返回類型用dynamic,看行不行呢?

支持(0) 反对(0) 無限遐想 | 园豆:3740 (老鸟四级) | 2012-05-25 14:16
2
   public static List<NewInfo> GetHotNews()
        {
            List<NewInfo> list;
            list = (from n in db.NewInfoes
                    where n.IsTop == 1
                    orderby n.PublishTime descending
                    select new NewInfo
                    {
                        Title = n.Title,
                        NewID = n.NewID,
                        PublishTime = n.PublishTime
                    }).ToList();
            return list;
        }

改成这样不可以吗?

无之无 | 园豆:5095 (大侠五级) | 2012-05-25 12:34

显然不可能,如果可以,我就不来提问了。

支持(0) 反对(0) 西安-DB | 园豆:4 (初学一级) | 2012-05-25 14:11

@周兆坤: 既然你说了“显然不可能”, 我想问你,你为什么会通过一个匿名类型的查询结果集合对象返回这个NewInfo类型呢?明显就是牛头不对马嘴!可能把一个匿名类型的集合转换为NewInfo的集合类型吗?你的错误是报告“赋值失败,类型不匹配”吧?!!

支持(0) 反对(0) 无之无 | 园豆:5095 (大侠五级) | 2012-05-25 14:33

@笨笨蜗牛: 嗯,现在为止,我还是采取读取全部数据的办法实现这一部分,但是 新闻内容值太大,并且在列表页不用显示 新闻内容,方法是笨了一些,所以我来园子里找其他方法么。现在我的问题是 如果读取部分列数据并展示在页面上,而不是我把胳膊腿强制转换成一个完整的人。如果您有好办法,还望传授于我,感激不尽。

支持(0) 反对(0) 西安-DB | 园豆:4 (初学一级) | 2012-05-25 17:13

很好  解决了我的问题

支持(0) 反对(0) 江亚博 | 园豆:205 (菜鸟二级) | 2014-06-30 15:01
0

应该可以用ToList<object>(),然后用List<object>类型,或像楼上所说。

sinhbv | 园豆:2579 (老鸟四级) | 2012-05-25 13:09
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册