List<Keywords_Info> keyList = base.DataContext.Database.SqlQuery<Keywords_Info>("SELECT TOP " + top + " Id,Keyword FROM Keywords_Info ORDER BY Id DESC").ToList();
如何指定查询的字段赋值给 Keywords_Info 对象?上文中就是指定Id和keyword两个字段,上面的查询无法转成强类型,只有:select * from Keywords_Info 的时候才能转换成强类型
你的意思是说执行: select Id,keyword from Keywords_Info 时,返回的结果集无法转换成 List<Keywords_Info> ,对吧。如果是的话,你可以在 .ToList() 之前先添加 .Cast<Keywords_Info>.
不行的,在Keywords_Info 这个model类里面,还有其他属性,强制转换是不行的,我想要的结果是:我有时候想批量选择字段,而不是每次都是 select * from table
@jquery09:
List<Keywords_Info> keyList = base.DataContext.Database.SqlQuery<Keywords_Info>("SELECT TOP " + top + " Id,Keyword FROM Keywords_Info ORDER BY Id DESC")
.Select(o=> new Keywords_Info{Id=o.Id,Keyword=o.Keyword})
.ToList();
@Launcher: 这样也是不对的 同样抛异常出来
@jquery09:
public class A
{
public string Id{get;set}
public string Keyword{get;set}
}
List<Keywords_Info> keyList = base.DataContext.Database.SqlQuery<A>("SELECT TOP " + top + " Id,Keyword FROM Keywords_Info ORDER BY Id DESC")
.Select(o=> new Keywords_Info{Id=o.Id,Keyword=o.Keyword})
.ToList();
@jquery09:
List<Keywords_Info> keyList = base.DataContext.Database.SqlQuery("SELECT TOP " + top + " Id,Keyword FROM Keywords_Info ORDER BY Id DESC")
.Select(o=> new Keywords_Info{Id=o.Id,Keyword=o.Keyword})
.ToList();
既然如此就不要强求了.
看看这个
http://www.cnblogs.com/humble/p/3380065.html
该问题的解决方法是, sql语句中使用select * 来取代具体的某几个列, 如果sql语句返回的列少于(具体化)实体的属性的个数,那么EF在具体化的时候将抛出一个异常。 如果sql 返回的列 多余具体化的实体属性的个数,那么EF将会忽视多出的列。
这个问题,我也是找了一下资料。
参考资料:http://www.cnblogs.com/shanyou/archive/2012/11/18/2776357.html
学习了。