首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LINQ查询中XmlNode上的“XmlNode”不工作

LINQ查询中XmlNode上的“XmlNode”不工作
EN

Stack Overflow用户
提问于 2009-06-26 08:42:39
回答 1查看 1.1K关注 0票数 2

当我在LINQ查询中在XmlNode上调用一个属性“XmlNode”时,我得到了一个奇怪的错误:“已经添加了一个具有相同键的项”。

查询如下:

代码语言:javascript
复制
var partnersXml = from partnerTable in dataContext.SomeTableInDb
                  where partnerTable.XmlType == "partner"
                  select new
                  {
                     partnerId = XmlDocumentWrapper(partnerTable.XmlDocument).SelectSingleNode("//*[name()='partnerId']").InnerText                 
                  };

解释:

  • partnerTable.XmlDocument是DB
  • XmlDocumentWrapper方法中的字符串xml,为给定的xml字符串

返回XmlDocument。

查询完全没有"InnerText“(然后partnerId包含XmlNode)。这是LINQ中的某种bug吗?这个问题的解决办法是什么?

堆栈跟踪:

System.ArgumentException:已经添加了一个具有相同键的项。(在System.ThrowHelper.ThrowArgumentException(ExceptionResource资源)在System.Collections.Generic.Dictionary2.Insert(TKey key, TValue value, Boolean add) at System.Data.Linq.Mapping.UnmappedType.GetDataMember(MemberInfo mi) at System.Data.Linq.SqlClient.SqlFactory.Member(SqlExpression expr, MemberInfo member) at System.Data.Linq.SqlClient.QueryConverter.VisitMemberAccess(MemberExpression ma) at System.Data.Linq.SqlClient.QueryConverter.VisitInner(Expression node) at System.Data.Linq.SqlClient.QueryConverter.Visit(Expression node) at System.Data.Linq.SqlClient.QueryConverter.VisitExpression(Expression exp) at System.Data.Linq.SqlClient.QueryConverter.VisitNew(NewExpression qn) at System.Data.Linq.SqlClient.QueryConverter.VisitInner(Expression node) at System.Data.Linq.SqlClient.QueryConverter.Visit(Expression node) at System.Data.Linq.SqlClient.QueryConverter.VisitSelect(Expression sequence, LambdaExpression selector) at System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(MethodCallExpression mc) at System.Data.Linq.SqlClient.QueryConverter.VisitMethodCall(MethodCallExpression mc) at System.Data.Linq.SqlClient.QueryConverter.VisitInner(Expression node) at System.Data.Linq.SqlClient.QueryConverter.ConvertOuter(Expression node) at System.Data.Linq.SqlClient.SqlProvider.BuildQuery(Expression query, SqlNodeAnnotations annotations) at System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query) at System.Data.Linq.DataQuery1.System.Collections.Generic.IEnumerable.GetEnumerator()

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-06-26 09:06:37

看起来LINQ正在尝试进行一些映射,而您希望它在.NET端完成。(我想--如果你想让数据库做XPath,恐怕我不知道。)试试这个:

代码语言:javascript
复制
var partnersXml = dataContext.SomeTableInDb
     .Where(x => x.XmlType == "partner")
     .AsEnumerable() // This forces the rest of the query to be done in the CLR
     .Select(x => new {
          partnerId = XmlDocumentWrapper(x.XmlDocument)
                           .SelectSingleNode("//*[name()='partnerId']")
                           .InnerText
     });
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1048041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档