/*
*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>");
}



