求教关于linq IQueryable类型取值和类型转换的问题

zxz19 2011-03-07 10:02:50
数据访问这里的代码:
public IQueryable LoadConfig(int groupId)
{
DataAccessDataContext myDc = new DataAccessDataContext();
var config = from configs in myDc.MyConfig
where configs.groupid == groupId
select new
{
configs.id,
configs.varname,
configs.type,
configs.description,
configs.value
};
return config;
}

这样在读取数据的时候得到的结果 IQueryable myConfig = LoadSysConfig(3); 怎么取到myConfig里面的每个值呢?这样读出的myConfig是一个匿名类型的,又该怎么可以将其转换成其他类型,比如我Model层里面的Congfig模型?

通过foreach读取里面的值是这样的:
{ id = 32, varname = isvalidatecode, type = bool, description = 是否开启验证码, value = true }{ id = 33, varname = codetype, type = int, description = 验证码类型, value = 3 }{ id = 34, varname = imgtype, type = string, description = 验证码图片文件类型, value = gif }{ id = 35, varname = fgnoise, type = int, description = 前景噪音干扰点数量, value = 100 }{ id = 36, varname = bgnoise, type = int, description = 背景噪音干扰线数量, value = 30 }{ id = 37, varname = codewidth, type = int, description = 验证码图片宽度, value = 100 }{ id = 38, varname = codeheight, type = int, description = 验证码图片高度, value = 30 }{ id = 40, varname = bgcolor, type = string, description = 验证码背景颜色(输入0则表示背景颜色随机), value = 0 }{ id = 41, varname = bgnoisecolor, type = string, description = 背景干扰线颜色, value = #FF8080 }{ id = 42, varname = bgnoisewidth, type = float, description = 背景干扰线宽度, value = 1.2f }{ id = 43, varname = codefontsize, type = int, description = 验证码字体大小, value = 14 }{ id = 44, varname = codefontstyle, type = string, description = 验证码字体样式, value = Bold, Italic, Strikeout }{ id = 45, varname = codecolor1, type = string, description = 验证码颜色渐变起点色, value = #0000FF }{ id = 46, varname = codecolor2, type = string, description = 验证码颜色渐变终点色, value = #FF0000 }{ id = 47, varname = changeangle, type = float, description = 验证码颜色渐变改变角度, value = 1.2f }{ id = 48, varname = isdistortion, type = bool, description = 文字是否变形, value = false }{ id = 49, varname = codelength, type = int, description = 验证码字符个数, value = 4 }

也就是相当于每行就是一个Config的对象,但我究竟要怎么得到它这个具体的值呢?
...全文
758 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
醉雪卧沙 2013-11-07
  • 打赏
  • 举报
回复
同上啊,自学的三层架构和半吊子的linq,前辈们有解决方法么
dudibo 2011-04-02
  • 打赏
  • 举报
回复
我也遇到了这个问题,看看是怎么解决的。
q107770540 2011-03-07
  • 打赏
  • 举报
回复

//自定义类来实现
public List<Config> LoadConfig(int groupId)
{
DataAccessDataContext myDc = new DataAccessDataContext();
var config = from configs in myDc.MyConfig
where configs.groupid == groupId
select new Config
{
id=configs.id,
varname=configs.varname,
type=nfigs.type,
descriptionconfigs.description,
value=configs.value
};
return config.ToList();
}
class Config
{
public int id{get;set;}
public string varname{get;set;}
public string type{get;set;}
public string description{get;set;}
public string value{get;set;}
}

http://topic.csdn.net/u/20110303/13/d2fe734a-c98d-44c3-b560-79e074355a47.html
zxz19 2011-03-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 q107770540 的回复:]
C# code

//自定义类来实现
public List<Config> LoadConfig(int groupId)
{
DataAccessDataContext myDc = new DataAccessDataContext();
var config = from configs in myDc.MyConfig
where configs.groupid……
[/Quote]
感谢Tim大大提供的解决思路

我这里的项目是分层架构了,直接用上面的会有点小问题,由于数据访问要实现数据接口,但接口要返回的又是Model层里的实体类型,同时接口又是不可以反过来引用数据访问层的,所以这样会造成运行时报错为实现接口的方法
后来又把这里自定义类改了(准确说没用这自定义类了),让这里直接指定model里的实体类型,结果运行还是报错:不允许在查询中显式构造实体类型
最后终于想另外个办法,把自定义类搬到model层去,这样接口是引用model的,接口就可以添加返回这个自定义的类型结果的成员方法了,数据访问这里也就能实现接口了,终于我也得到了我要的结果

只是不知道这样做的方法有没有其他副作用?

8,497

社区成员

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

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