LINQクエリのXmlNodeでプロパティ "InnerText"を呼び出すと、 "同じキーのアイテムが既に追加されています"という奇妙なエラーが発生します。LINQクエリのXmlNodeの "InnerText"が機能しません
クエリは次のようになります。
var partnersXml = from partnerTable in dataContext.SomeTableInDb
where partnerTable.XmlType == "partner"
select new
{
partnerId = XmlDocumentWrapper(partnerTable.XmlDocument).SelectSingleNode("//*[name()='partnerId']").InnerText
};
説明:
- partnerTable.XmlDocumentは
- XmlDocumentWrapperが方法は、与えられたXML文字列のためのXmlDocumentを返しDB内の文字列のXMLがある
"InnerText"がなくても照会が完璧に機能します(partnerIdにはXmlNodeが含まれています)。これはLINQの何らかのバグですか、それとも何ですか?この問題の回避策は何ですか?
スタックトレース:
System.ArgumentExceptionの:同じキーを持つ項目が既に追加されています。 System.ThrowHelper.ThrowArgumentExceptionで (ExceptionResourceリソース) System.Collections.Generic.Dictionary 2.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.DataQuery
1.System.Collections.Generic.IEnumerable.GetEnumerator()
任意のstacktrace?グループ分けをしていますか?別の?辞書がどこかに含まれているように聞こえます... –
グルーピングはありません。私が得る唯一のメッセージは、 "同じキーを持つアイテムがすでに追加されています"です。 –