如题
比如 我有个新闻表
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的童鞋,如果避免一次性读取大类型数据造成的数据污染??
需要将匿名类型转换为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; }
谢谢 dudu,周一去试试。感谢。。。。很荣幸 园主能来回答我的问题。感谢哈~~嘎嘎。
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,希望您不要嫌麻烦。谢谢。
错误 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
@周兆坤: 在.Select之后加上.ToList()
重新建立一個 類。
有没有“聪明”一些的办法呢?亲
@周兆坤: List<NewInfo> 返回類型用dynamic,看行不行呢?
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; }
改成这样不可以吗?
显然不可能,如果可以,我就不来提问了。
@周兆坤: 既然你说了“显然不可能”, 我想问你,你为什么会通过一个匿名类型的查询结果集合对象返回这个NewInfo类型呢?明显就是牛头不对马嘴!可能把一个匿名类型的集合转换为NewInfo的集合类型吗?你的错误是报告“赋值失败,类型不匹配”吧?!!
@笨笨蜗牛: 嗯,现在为止,我还是采取读取全部数据的办法实现这一部分,但是 新闻内容值太大,并且在列表页不用显示 新闻内容,方法是笨了一些,所以我来园子里找其他方法么。现在我的问题是 如果读取部分列数据并展示在页面上,而不是我把胳膊腿强制转换成一个完整的人。如果您有好办法,还望传授于我,感激不尽。
很好 解决了我的问题
应该可以用ToList<object>(),然后用List<object>类型,或像楼上所说。