让阳光指引生命的每一刻,乘着风,跟随我融化空气

美丽的地球,有美丽的cnblog [hjp3]hjptype=song&player=1&son=http://www.taihugolf.com.cn/villa/sound_00ok01.mp3&autoplay=yes&autoreplay=1&bgcolor=FFFFFF&width=200&height=20[/hjp3]

处理HQL复杂查询当使用left outer join 联合多个表查询数据时,返回的不是一个对象,而是一个多维[][]数组。


/*
*Description:HQL中用left outer join来连接多个对象*Auther:天很蓝_崇崇
*MSN:chongchong2008@msn.com
*Dates:2006-05-22
*Copyright:ChongChong2008 YiChang HuBei China
*/


当你用left outer join来连接多个对象的时候,注意返回的IList 或者是IEnumerable都不直接是一个实体对象,而是一个多维的数组,这一点一定要注意,否则你很难找到错误所在。

下面我来介绍一下:

Descriptions是WordEntity的一个IList类型的属性,也就是WordEntity里的Descriptions是一个一对多的东西


 public static IList GetWrod( string title )
        {

            SimpleQuery q = new SimpleQuery(
                typeof(WordEntity), typeof(typeof(IList)),
                //"from WordEntity word where word.Title like ?", //没有加left outer join的话这个输出就有内容
                @"from WordEntity word left outer join word.Descriptions description where word.Title like ? and word.DescriptionId in elements(word.Descriptions)", //用这个输出就没有信息,可以数据表里石油信息的
                title
            );
            return (IList)ExecuteQuery(q);
}


返回的这个IList实际上是一个实体[][].显然不符合我们的要求,我们需要的是一个集合对象

那么如何把返回的这个二维数组转换为我们的对象集合呢,跟我来....


            IList wordList = WordEntity.GetWord("Web%");
            int maxIndex = wordList.Count * 2;
            Response.Write(wordList.Count.ToString() + "---" + wordList.GetType().ToString() + "</br>" ) ;

            WordEntity myA;
            ArrayList myAs = new ArrayList();
            DescriptionEntity myB;

            int ii = 1;
            foreach (object[] o in wordList)
            {
                myA = new WordEntity();
                Response.Write(o.ToString() + "</br>");

                foreach (object oo in o)
                {
                    Response.Write("第" + ii.ToString() + "个元素 Start" + "</br>");
                    if (ii % 2 != 0)
                    {
                        if (ii <= maxIndex)
                        {
                            Response.Write(((WordEntity)oo).WordTitle + "</br>");
                            myA.WordTitle = ((WordEntity)oo).WordTitle;
                        }

                    }
                    else
                    {
                        myB = new DescriptionEntity();
                        myB.DescriptionContent = ((DescriptionEntity)oo).DescriptionContent;
                        myA.Descriptions.Add(myB);

                        Response.Write(((DescriptionEntity)oo).DescriptionContent+ "</br>");
                        myAs.Add(myA);
                    }

                    Response.Write("第" + ii.ToString() + "个元素 End" + "</br>");
                    ii++;

                }               
            }


好了,下面就可以利用foreach来遍历了~~~

            foreach (WordEntity we in myAs)
            {
                Response.Write(we.WordTitle + "</br>");
                foreach (DescriptionEntity d in we.Descriptions)
                {
                    Response.Write(d.DescriptionContent + "</br>");
                    Response.Write(d.DescriptionDate.ToString("yyyy-M-dd") + "</br>");
                }
                Response.Write("<p></p>");
            }


















posted on 2006-06-19 16:51 天真的好蓝啊 阅读(3680) 评论(2)  编辑 收藏 网摘 所属分类: C#.NET

Feedback

#1楼  2006-06-20 09:17 知识词典 [未注册用户]

支持一下   回复  引用    

#2楼  2007-10-11 11:50 PeterKing [未注册用户]

typeof(typeof(IList))这东东一直报错啊!   回复  引用    






标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2007-05-21 09:28 编辑过
Google站内搜索

China-pub 计算机图书网上专卖店!6.5万品种 2-8折!
近千种 9-95 新二手计算图书火热销售中!
开发者征途系统新作:《设计模式——基于C#的工程化实现及扩展》

相关文章:

相关链接:
 

My Links

Blog Stats

News

与我联系

搜索

 

常用链接

留言簿(1)

我管理的小组

我参加的小组

我的标签

随笔分类

随笔档案

相册

最新评论

阅读排行榜

评论排行榜

集从人之所长,创造博客社区神话,实现梦想!