首页 新闻 会员 周边

linq to sql 返回 匿名实体 dynamic调用时报错

0
悬赏园豆:100 [已解决问题] 解决于 2012-05-10 12:28
DAL层代码:
  public dynamic GetSpareInfoByCode(string spareCode)
        {

var
Query = (from SpareInfo in DBContext.Spare_Info where SpareInfo.SpareCode == spareCode select new { SpareInfo.SpareCode }).SingleOrDefault();
//此时调用 Query.SpareCode;正常
return Query;
  }
调用代码: 
 var entSpareInfo = bllSpareInfo.GetSpareInfoByCode(spareCode);
//此时调用抛出异常
this.lblSpareCode.Text = entSpareInfo.SpareCode;

调用entSpareInfo.SpareCode;时抛出异常:“object”未包含“SpareCode”的定义

 


 

黑泡泡的主页 黑泡泡 | 菜鸟二级 | 园豆:222
提问于:2012-05-05 00:23
< >
分享
最佳答案
0

算了,还是自己声明一个实体来返回吧

黑泡泡 | 菜鸟二级 |园豆:222 | 2012-05-10 12:27
其他回答(2)
0

如果匿名实体跟使用实体不在一个模块的话。。。是会报告这样的错误。因为匿名实体是internal的访问权限。

(嘿嘿,我也为这个郁闷过)

如果你一定要这样用,那把返回的对象使用Dynamic的一个类型封装(具体的类型忘记了,你搜查一下)。

收获园豆:20
无之无 | 园豆:5095 (大侠五级) | 2012-05-05 08:18

我搜索"Dynamic 类型封装",但是没有找到我要的结果!

支持(0) 反对(0) 黑泡泡 | 园豆:222 (菜鸟二级) | 2012-05-05 10:08

@黑泡泡: System.Dynamic名称空间下,System.Core这个DLL模块中。

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

@无之无: 我也同样遇到了这个问题,按照提示,找了System.Dynamic下的东西,觉得只有DynamicObject对象最靠谱,但是貌似不对

//这个也不对

DynamicObject  entSpareInfo = bllSpareInfo.GetSpareInfoByCode(spareCode);

我找到的一个比较合理的解释就是 匿名实体默认是private类型,所以程序集A创建的,程序集B就访问不到

支持(0) 反对(0) straw | 园豆:191 (初学一级) | 2013-05-02 11:07
0
void Main()
{
    dynamic  x=GetSpareInfoByCode();//var 和dynamic都是运行时报错
    Console.Write(x);//正常输出
    //x.Dump();  //报错

object y=GetSpareInfoByCode(); Console.Write(y);//正常输出 y.Dump(); //正确 } public dynamic GetSpareInfoByCode(){ var words = from word in "The quick brown fox jumps over the lazy dog".Split() orderby word.ToUpper() select word; var duplicates = from word in words group word.ToUpper() by word.ToUpper() into g where g.Count() > 1 select new { g.Key, Count = g.Count() }; return duplicates; }

参考:http://www.cnblogs.com/serviceboy/archive/2010/04/16/1713688.html

http://hi.baidu.com/%E5%EB%B3%DF%C8%CB%C9%FA/blog/item/8d219e910cb47e84a977a487.html

http://msdn.microsoft.com/zh-cn/library/dd264736.aspx

 

 也就是说你返回的dynamic类型必须转换成正确的类型才能使用!

 开发人员可以轻松的在dynamic和非dynamic类型之间转换,正是由于dynamic类型在编译时被视为支持任何操作,所在只需要保证它们之间的转换是正确的数据类型转换,否则运行时会发生错误

坐等高手啊

=========================================

返回匿名实体  用 tolist返回 然后 

void Main()
{
    var  x=GetSpareInfoByCode();
foreach (var item in (IEnumerable<object>)x)
{
Console.Write(item.GetType().GetProperty("Key").GetValue(item, null));
Console.Write(item.GetType().GetProperty("Count").GetValue(item, null));
}
}
    public dynamic  GetSpareInfoByCode(){
    var words =
        from word in "The quick brown fox jumps over the lazy dog".Split()
        orderby word.ToUpper()
        select word;
        
    var duplicates =
        from word in words
        group word.ToUpper() by word.ToUpper() into g
        where g.Count() > 1
        select new { g.Key, Count = g.Count() };
            return duplicates.ToList();//重点
        }

输出结果

THE

2

 

@黑泡泡

收获园豆:80
一个土豆一棵青菜 | 园豆:268 (菜鸟二级) | 2012-05-05 11:21

我需要返回的是

SingleOrDefault()
无法
ToList()
支持(0) 反对(0) 黑泡泡 | 园豆:222 (菜鸟二级) | 2012-05-05 14:41
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册