LINQ TO SQL AND LINQ TO XML联合查询遇到的问题
在做LINQ TO SQL AND LINQ TO XML联合查询时遇到一个奇怪的问题,情况如下
这样做是没问题的
BookDataContext data = new BookDataContext();
XElement xe = XElement.Load(Server.MapPath("myxml.xml"));
var q=from b in xe.Descendants("book")
join t in data.booktype on (int)b.Attribute("booktype") equals t.id
select new {
id=(string)b.Element("id"),
bookname = (string)b.Element("bookname"),
publish = (string)b.Element("publish"),
price=(string)b.Element("price"),
booktype=t.typename
};
foreach (var qq in q)
{
Response.Write(qq.id + "--" + qq.bookname + "--" + qq.price + "--" + qq.publish + "--" + qq.booktype + "<br>");
}
但是对调一下位置就出现问题了(报错为 :不能在查询运算符(Contains() 运算符除外)的 LINQ to SQL 实现中使用本地序列。 )
BookDataContext data = new BookDataContext();
XElement xe = XElement.Load(Server.MapPath("myxml.xml"));
var q = from t in data.booktype
join b in xe.Descendants("book") on t.id equals (int)b.Attribute("booktype")
select new
{
id = (string)b.Element("id"),
bookname = (string)b.Element("bookname"),
publish = (string)b.Element("publish"),
price = (string)b.Element("price"),
booktype = t.typename
};
foreach (var qq in q)
{
Response.Write(qq.id + "--" + qq.bookname + "--" + qq.price + "--" + qq.publish + "--" + qq.booktype + "<br>");
}
真是奇怪了
var q=from b in xe.Descendants("book")
join t in data.booktype on (int)b.Attribute("booktype") equals t.id (没问题)
var q = from t in data.booktype
join b in xe.Descendants("book") on t.id equals (int)b.Attribute("booktype") (报错)
为什么会出现这种情况呢?还有报错的那个做法要怎么修改?请高手们帮忙解答啊,多谢了!
------解决方案--------------------
var q = from t in data.booktype.ToList()
join b in xe.Descendants("book") on t.id equals (int)b.Attribute("booktype") into bb
from b in bb.DefaultIfEmpty()
select new {
id=b==null?"0":(string)b.Element("id"),
bookname =b==null?"": (string)b.Element("bookname"),
publish =b==null?"": (string)b.Element("publish"),
price=b==null?"":(string)b.Element("price"),
booktype=t.typename
};