2016-12-07 6 views
2

リストオブジェクト:クロスLINQのXMLを超える参加し、LINQのは、私がそのコンテンツを持つXMLファイル持って

その後、
<?xml version="1.0" encoding="utf-8" ?> 
<packages> 
    <package productnumber="123"> 
    <stpos> 
     <pid>345</pid> 
     <vat>10</vat> 
    </stpos> 
    <stpos> 
     <pid>678</pid> 
     <vat>20</vat> 
    </stpos> 
    </package> 
    <package productnumber="246"> 
    <stpos> 
     <pid>81012</pid> 
     <vat>5</vat> 
    </stpos> 
    <stpos> 
     <pid>141618</pid> 
     <vat>2</vat> 
    </stpos> 
    </package> 
</packages> 

私はまだ、製品のリストを持っていた:

var productList = new List<Product> 
{ 
    new Product {ProductNumber = "123" }, 
    new Product {ProductNumber = "345" }, 
    new Product {ProductNumber = "678" }, 
    new Product {ProductNumber = "246" }, 
    new Product {ProductNumber = "81012" }, 
    new Product {ProductNumber = "Nothing" }, 
}; 

私がしたいことを確認してください各パッケージについてs productnumber and its pidはproductList内に存在します。 trueの場合は、それらのパッケージを返します。上記の私のサンプルで

すべての3つの製品番号は、製品のリストに存在したので、私はproductnumber 123とリターンパッケージにしたいです。

var doc = XDocument.Load("./packages.xml"); 
    var query = (from package in doc.Descendants("packages").Elements() 
       from p in productList 
       where p.ProductNumber == package.Attribute("productnumber").Value && 
       productList.All(p => 
       package.Descendants("stpos").Select(x => x.Element("pid").Value).Contains(p.ProductNumber)) 
       select package).ToList(); 
:唯一の2製品番号は、製品のリストに含まれているため

productnumber 246とパッケージはを返却すべきではない、「何も」...私のクエリザッツ

が含まれていないされていません

私のquery.Count()は0で、理由はわかりません。

誰もが私の目を開くことができ

+0

しかし123の内部のPIDある345と678は、中に含まれていません'productList' – octavioccl

+0

これは私が今修正したタイプミスです!まだ動作しません!カウントはまだゼロです!私も十字架に参加していると思いますが、現時点でどのように使用しているかは正しくありません;-) – Elisabeth

答えて

0

私は、これはあなたが達成しようとしているものだと思います:-)してください:

var doc = XDocument.Load("./packages.xml"); 
var numbers=productList.Select(p=>p.ProductNumber); 
var query= doc.Descendants("package") 
       .Where(e=>numbers.Contains((string)e.Attribute("productnumber")) && 
         e.Descendants("stpos").All(p=>numbers.Contains((string)p.Element("pid")))); 
+0

あなたは要素に.Valueを使用していません。あなたの文字列キャストされたコードで私は0カウントを取得します。さて、私は今働いている!あなたのソリューションにそれを追加してください:-) – Elisabeth

+0

しかし、 "ProductName"は文字列プロパティではありませんか?、キャスティングもありますか?要素/属性の値を取得する – octavioccl

+0

pid、productNumberは両方の文字列です! – Elisabeth

関連する問題