LINQ to XML selecting elements similar to SQL IN clause2019 Community Moderator ElectionUse linq to generate direct update without selectLINQ to read XMLUsing LINQ to remove elements from a List<T>Create XML using Linq to XML and arrayslinq to xml - display results based on array or listWhat is the difference between Linq to XML Descendants and ElementsHow to query XML data in database column using Linq to SQL and Linq to XML?Selecting nth child element based on parent elements attributeLINQ to XML: Select values conditional on other valuesLinq to XML to populate parent/child relationship

I got the following comment from a reputed math journal. What does it mean?

Are Roman Catholic priests ever addressed as pastor

World War I as a war of liberals against authoritarians?

Is it insecure to send a password in a `curl` command?

What is the relationship between relativity and the Doppler effect?

Are ETF trackers fundamentally better than individual stocks?

How to make healing in an exploration game interesting

Do I need to be arrogant to get ahead?

Math equation in non italic font

What's the meaning of a knight fighting a snail in medieval book illustrations?

How can we have a quark condensate without a quark potential?

Is there a place to find the pricing for things not mentioned in the PHB? (non-magical)

Violin - Can double stops be played when the strings are not next to each other?

Different outputs for `w`, `who`, `whoami` and `id`

What is "focus distance lower/upper" and how is it different from depth of field?

How could a scammer know the apps on my phone / iTunes account?

What is the adequate fee for a reveal operation?

Python if-else code style for reduced code for rounding floats

Is it good practice to use Linear Least-Squares with SMA?

Simplify an interface for flexibly applying rules to periods of time

Why does a Star of David appear at a rally with Francisco Franco?

What are substitutions for coconut in curry?

How do you talk to someone whose loved one is dying?

Happy pi day, everyone!



LINQ to XML selecting elements similar to SQL IN clause



2019 Community Moderator ElectionUse linq to generate direct update without selectLINQ to read XMLUsing LINQ to remove elements from a List<T>Create XML using Linq to XML and arrayslinq to xml - display results based on array or listWhat is the difference between Linq to XML Descendants and ElementsHow to query XML data in database column using Linq to SQL and Linq to XML?Selecting nth child element based on parent elements attributeLINQ to XML: Select values conditional on other valuesLinq to XML to populate parent/child relationship










0















I have some XML that contains Payment information including details on the Invoices the payments are being applied to. I would like to use LINQ to XML to gather only those payments that are applied to certain invoices (111,222,333) for example. If it were SQL I could use the IN (111,222,333) keyword but I am not sure how to do the same in LINQ.



<Payment>
<PaymentId>1</PaymentId>
<Total>50</Total>
<Invoice>
<Id>111</Id>
<Amount>20</Amount>
</Invoice>
<Invoice>
<Id>555</Id>
<Amount>30</Amount>
</Invoice>
</Payment>
<Payment>
<PaymentId>2</PaymentId>
<Total>20</Total>
<Invoice>
<Id>222</Id>
<Amount>20</Amount>
</Invoice>
</Payment>
<Payment>
<PaymentId>3</PaymentId>
<Total>80</Total>
<Invoice>
<Id>888</Id>
<Amount>80</Amount>
</Invoice>
</Payment>


LINQ



var result = xml.Select(x => x.Element("Payment"))
Where(x => x.Element("Id").Value.Contains("111","222","333"))


In this example, I would like to select "PaymentId 1" and "PaymentId 2" since they apply to invoices that have Ids that match 111, 222, or 333.










share|improve this question


























    0















    I have some XML that contains Payment information including details on the Invoices the payments are being applied to. I would like to use LINQ to XML to gather only those payments that are applied to certain invoices (111,222,333) for example. If it were SQL I could use the IN (111,222,333) keyword but I am not sure how to do the same in LINQ.



    <Payment>
    <PaymentId>1</PaymentId>
    <Total>50</Total>
    <Invoice>
    <Id>111</Id>
    <Amount>20</Amount>
    </Invoice>
    <Invoice>
    <Id>555</Id>
    <Amount>30</Amount>
    </Invoice>
    </Payment>
    <Payment>
    <PaymentId>2</PaymentId>
    <Total>20</Total>
    <Invoice>
    <Id>222</Id>
    <Amount>20</Amount>
    </Invoice>
    </Payment>
    <Payment>
    <PaymentId>3</PaymentId>
    <Total>80</Total>
    <Invoice>
    <Id>888</Id>
    <Amount>80</Amount>
    </Invoice>
    </Payment>


    LINQ



    var result = xml.Select(x => x.Element("Payment"))
    Where(x => x.Element("Id").Value.Contains("111","222","333"))


    In this example, I would like to select "PaymentId 1" and "PaymentId 2" since they apply to invoices that have Ids that match 111, 222, or 333.










    share|improve this question
























      0












      0








      0


      1






      I have some XML that contains Payment information including details on the Invoices the payments are being applied to. I would like to use LINQ to XML to gather only those payments that are applied to certain invoices (111,222,333) for example. If it were SQL I could use the IN (111,222,333) keyword but I am not sure how to do the same in LINQ.



      <Payment>
      <PaymentId>1</PaymentId>
      <Total>50</Total>
      <Invoice>
      <Id>111</Id>
      <Amount>20</Amount>
      </Invoice>
      <Invoice>
      <Id>555</Id>
      <Amount>30</Amount>
      </Invoice>
      </Payment>
      <Payment>
      <PaymentId>2</PaymentId>
      <Total>20</Total>
      <Invoice>
      <Id>222</Id>
      <Amount>20</Amount>
      </Invoice>
      </Payment>
      <Payment>
      <PaymentId>3</PaymentId>
      <Total>80</Total>
      <Invoice>
      <Id>888</Id>
      <Amount>80</Amount>
      </Invoice>
      </Payment>


      LINQ



      var result = xml.Select(x => x.Element("Payment"))
      Where(x => x.Element("Id").Value.Contains("111","222","333"))


      In this example, I would like to select "PaymentId 1" and "PaymentId 2" since they apply to invoices that have Ids that match 111, 222, or 333.










      share|improve this question














      I have some XML that contains Payment information including details on the Invoices the payments are being applied to. I would like to use LINQ to XML to gather only those payments that are applied to certain invoices (111,222,333) for example. If it were SQL I could use the IN (111,222,333) keyword but I am not sure how to do the same in LINQ.



      <Payment>
      <PaymentId>1</PaymentId>
      <Total>50</Total>
      <Invoice>
      <Id>111</Id>
      <Amount>20</Amount>
      </Invoice>
      <Invoice>
      <Id>555</Id>
      <Amount>30</Amount>
      </Invoice>
      </Payment>
      <Payment>
      <PaymentId>2</PaymentId>
      <Total>20</Total>
      <Invoice>
      <Id>222</Id>
      <Amount>20</Amount>
      </Invoice>
      </Payment>
      <Payment>
      <PaymentId>3</PaymentId>
      <Total>80</Total>
      <Invoice>
      <Id>888</Id>
      <Amount>80</Amount>
      </Invoice>
      </Payment>


      LINQ



      var result = xml.Select(x => x.Element("Payment"))
      Where(x => x.Element("Id").Value.Contains("111","222","333"))


      In this example, I would like to select "PaymentId 1" and "PaymentId 2" since they apply to invoices that have Ids that match 111, 222, or 333.







      c# linq-to-xml linq-method-syntax






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Mar 6 at 21:00









      webwormwebworm

      4,3732083150




      4,3732083150






















          1 Answer
          1






          active

          oldest

          votes


















          1














          You can do a match/intersect against a list of these wellknown Id's.



          List<string> ids = new List<string> "111", "222", "333" ;

          var result = xml
          .Elements("Payment")
          .Where(p =>
          var invoiceIds = p.Elements("Invoice").Elements("Id").Select(o => o.Value);
          return ids.Intersect(invoiceIds).Any();

          );


          Full code and NetFiddle.




          const string XML = @"
          <root>
          <Payment>
          <PaymentId>1</PaymentId>
          <Total>50</Total>
          <Invoice>
          <Id>555</Id>
          <Amount>30</Amount>
          </Invoice>
          <Invoice>
          <Id>111</Id>
          <Amount>30</Amount>
          </Invoice>
          </Payment>
          <Payment>
          <PaymentId>2</PaymentId>
          <Total>20</Total>
          <Invoice>
          <Id>222</Id>
          <Amount>20</Amount>
          </Invoice>
          </Payment>
          <Payment>
          <PaymentId>3</PaymentId>
          <Total>80</Total>
          <Invoice>
          <Id>888</Id>
          <Amount>80</Amount>
          </Invoice>
          </Payment>
          </root>
          ";

          XElement xml = XElement.Parse(XML);
          List<string> ids = new List<string> "111", "222", "333" ;

          var result = xml
          .Elements("Payment")
          .Where(p =>
          var invoiceIds = p.Elements("Invoice").Elements("Id").Select(o => o.Value);
          return ids.Intersect(invoiceIds).Any();

          );

          foreach (var item in result)

          Console.WriteLine("PaymentId: 0", (string)item.Element("PaymentId"));






          share|improve this answer

























          • I see .. so I needed to find the Id element value within the collection of known Ids. I was going about it the reverse way .. and it didn't work! Thanks!

            – webworm
            Mar 6 at 22:23











          • When I try this I get an Object reference not set to an instance of an object error on the ids List.

            – webworm
            Mar 6 at 23:12











          • @webworm Made an improvement, didn't notice that a payment can have multiple invoice-ids.

            – pfx
            Mar 7 at 11:34











          Your Answer






          StackExchange.ifUsing("editor", function ()
          StackExchange.using("externalEditor", function ()
          StackExchange.using("snippets", function ()
          StackExchange.snippets.init();
          );
          );
          , "code-snippets");

          StackExchange.ready(function()
          var channelOptions =
          tags: "".split(" "),
          id: "1"
          ;
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function()
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled)
          StackExchange.using("snippets", function()
          createEditor();
          );

          else
          createEditor();

          );

          function createEditor()
          StackExchange.prepareEditor(
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader:
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          ,
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          );



          );













          draft saved

          draft discarded


















          StackExchange.ready(
          function ()
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55032055%2flinq-to-xml-selecting-elements-similar-to-sql-in-clause%23new-answer', 'question_page');

          );

          Post as a guest















          Required, but never shown

























          1 Answer
          1






          active

          oldest

          votes








          1 Answer
          1






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          1














          You can do a match/intersect against a list of these wellknown Id's.



          List<string> ids = new List<string> "111", "222", "333" ;

          var result = xml
          .Elements("Payment")
          .Where(p =>
          var invoiceIds = p.Elements("Invoice").Elements("Id").Select(o => o.Value);
          return ids.Intersect(invoiceIds).Any();

          );


          Full code and NetFiddle.




          const string XML = @"
          <root>
          <Payment>
          <PaymentId>1</PaymentId>
          <Total>50</Total>
          <Invoice>
          <Id>555</Id>
          <Amount>30</Amount>
          </Invoice>
          <Invoice>
          <Id>111</Id>
          <Amount>30</Amount>
          </Invoice>
          </Payment>
          <Payment>
          <PaymentId>2</PaymentId>
          <Total>20</Total>
          <Invoice>
          <Id>222</Id>
          <Amount>20</Amount>
          </Invoice>
          </Payment>
          <Payment>
          <PaymentId>3</PaymentId>
          <Total>80</Total>
          <Invoice>
          <Id>888</Id>
          <Amount>80</Amount>
          </Invoice>
          </Payment>
          </root>
          ";

          XElement xml = XElement.Parse(XML);
          List<string> ids = new List<string> "111", "222", "333" ;

          var result = xml
          .Elements("Payment")
          .Where(p =>
          var invoiceIds = p.Elements("Invoice").Elements("Id").Select(o => o.Value);
          return ids.Intersect(invoiceIds).Any();

          );

          foreach (var item in result)

          Console.WriteLine("PaymentId: 0", (string)item.Element("PaymentId"));






          share|improve this answer

























          • I see .. so I needed to find the Id element value within the collection of known Ids. I was going about it the reverse way .. and it didn't work! Thanks!

            – webworm
            Mar 6 at 22:23











          • When I try this I get an Object reference not set to an instance of an object error on the ids List.

            – webworm
            Mar 6 at 23:12











          • @webworm Made an improvement, didn't notice that a payment can have multiple invoice-ids.

            – pfx
            Mar 7 at 11:34
















          1














          You can do a match/intersect against a list of these wellknown Id's.



          List<string> ids = new List<string> "111", "222", "333" ;

          var result = xml
          .Elements("Payment")
          .Where(p =>
          var invoiceIds = p.Elements("Invoice").Elements("Id").Select(o => o.Value);
          return ids.Intersect(invoiceIds).Any();

          );


          Full code and NetFiddle.




          const string XML = @"
          <root>
          <Payment>
          <PaymentId>1</PaymentId>
          <Total>50</Total>
          <Invoice>
          <Id>555</Id>
          <Amount>30</Amount>
          </Invoice>
          <Invoice>
          <Id>111</Id>
          <Amount>30</Amount>
          </Invoice>
          </Payment>
          <Payment>
          <PaymentId>2</PaymentId>
          <Total>20</Total>
          <Invoice>
          <Id>222</Id>
          <Amount>20</Amount>
          </Invoice>
          </Payment>
          <Payment>
          <PaymentId>3</PaymentId>
          <Total>80</Total>
          <Invoice>
          <Id>888</Id>
          <Amount>80</Amount>
          </Invoice>
          </Payment>
          </root>
          ";

          XElement xml = XElement.Parse(XML);
          List<string> ids = new List<string> "111", "222", "333" ;

          var result = xml
          .Elements("Payment")
          .Where(p =>
          var invoiceIds = p.Elements("Invoice").Elements("Id").Select(o => o.Value);
          return ids.Intersect(invoiceIds).Any();

          );

          foreach (var item in result)

          Console.WriteLine("PaymentId: 0", (string)item.Element("PaymentId"));






          share|improve this answer

























          • I see .. so I needed to find the Id element value within the collection of known Ids. I was going about it the reverse way .. and it didn't work! Thanks!

            – webworm
            Mar 6 at 22:23











          • When I try this I get an Object reference not set to an instance of an object error on the ids List.

            – webworm
            Mar 6 at 23:12











          • @webworm Made an improvement, didn't notice that a payment can have multiple invoice-ids.

            – pfx
            Mar 7 at 11:34














          1












          1








          1







          You can do a match/intersect against a list of these wellknown Id's.



          List<string> ids = new List<string> "111", "222", "333" ;

          var result = xml
          .Elements("Payment")
          .Where(p =>
          var invoiceIds = p.Elements("Invoice").Elements("Id").Select(o => o.Value);
          return ids.Intersect(invoiceIds).Any();

          );


          Full code and NetFiddle.




          const string XML = @"
          <root>
          <Payment>
          <PaymentId>1</PaymentId>
          <Total>50</Total>
          <Invoice>
          <Id>555</Id>
          <Amount>30</Amount>
          </Invoice>
          <Invoice>
          <Id>111</Id>
          <Amount>30</Amount>
          </Invoice>
          </Payment>
          <Payment>
          <PaymentId>2</PaymentId>
          <Total>20</Total>
          <Invoice>
          <Id>222</Id>
          <Amount>20</Amount>
          </Invoice>
          </Payment>
          <Payment>
          <PaymentId>3</PaymentId>
          <Total>80</Total>
          <Invoice>
          <Id>888</Id>
          <Amount>80</Amount>
          </Invoice>
          </Payment>
          </root>
          ";

          XElement xml = XElement.Parse(XML);
          List<string> ids = new List<string> "111", "222", "333" ;

          var result = xml
          .Elements("Payment")
          .Where(p =>
          var invoiceIds = p.Elements("Invoice").Elements("Id").Select(o => o.Value);
          return ids.Intersect(invoiceIds).Any();

          );

          foreach (var item in result)

          Console.WriteLine("PaymentId: 0", (string)item.Element("PaymentId"));






          share|improve this answer















          You can do a match/intersect against a list of these wellknown Id's.



          List<string> ids = new List<string> "111", "222", "333" ;

          var result = xml
          .Elements("Payment")
          .Where(p =>
          var invoiceIds = p.Elements("Invoice").Elements("Id").Select(o => o.Value);
          return ids.Intersect(invoiceIds).Any();

          );


          Full code and NetFiddle.




          const string XML = @"
          <root>
          <Payment>
          <PaymentId>1</PaymentId>
          <Total>50</Total>
          <Invoice>
          <Id>555</Id>
          <Amount>30</Amount>
          </Invoice>
          <Invoice>
          <Id>111</Id>
          <Amount>30</Amount>
          </Invoice>
          </Payment>
          <Payment>
          <PaymentId>2</PaymentId>
          <Total>20</Total>
          <Invoice>
          <Id>222</Id>
          <Amount>20</Amount>
          </Invoice>
          </Payment>
          <Payment>
          <PaymentId>3</PaymentId>
          <Total>80</Total>
          <Invoice>
          <Id>888</Id>
          <Amount>80</Amount>
          </Invoice>
          </Payment>
          </root>
          ";

          XElement xml = XElement.Parse(XML);
          List<string> ids = new List<string> "111", "222", "333" ;

          var result = xml
          .Elements("Payment")
          .Where(p =>
          var invoiceIds = p.Elements("Invoice").Elements("Id").Select(o => o.Value);
          return ids.Intersect(invoiceIds).Any();

          );

          foreach (var item in result)

          Console.WriteLine("PaymentId: 0", (string)item.Element("PaymentId"));







          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Mar 7 at 12:38

























          answered Mar 6 at 22:21









          pfxpfx

          5,450122035




          5,450122035












          • I see .. so I needed to find the Id element value within the collection of known Ids. I was going about it the reverse way .. and it didn't work! Thanks!

            – webworm
            Mar 6 at 22:23











          • When I try this I get an Object reference not set to an instance of an object error on the ids List.

            – webworm
            Mar 6 at 23:12











          • @webworm Made an improvement, didn't notice that a payment can have multiple invoice-ids.

            – pfx
            Mar 7 at 11:34


















          • I see .. so I needed to find the Id element value within the collection of known Ids. I was going about it the reverse way .. and it didn't work! Thanks!

            – webworm
            Mar 6 at 22:23











          • When I try this I get an Object reference not set to an instance of an object error on the ids List.

            – webworm
            Mar 6 at 23:12











          • @webworm Made an improvement, didn't notice that a payment can have multiple invoice-ids.

            – pfx
            Mar 7 at 11:34

















          I see .. so I needed to find the Id element value within the collection of known Ids. I was going about it the reverse way .. and it didn't work! Thanks!

          – webworm
          Mar 6 at 22:23





          I see .. so I needed to find the Id element value within the collection of known Ids. I was going about it the reverse way .. and it didn't work! Thanks!

          – webworm
          Mar 6 at 22:23













          When I try this I get an Object reference not set to an instance of an object error on the ids List.

          – webworm
          Mar 6 at 23:12





          When I try this I get an Object reference not set to an instance of an object error on the ids List.

          – webworm
          Mar 6 at 23:12













          @webworm Made an improvement, didn't notice that a payment can have multiple invoice-ids.

          – pfx
          Mar 7 at 11:34






          @webworm Made an improvement, didn't notice that a payment can have multiple invoice-ids.

          – pfx
          Mar 7 at 11:34




















          draft saved

          draft discarded
















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid


          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.

          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function ()
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55032055%2flinq-to-xml-selecting-elements-similar-to-sql-in-clause%23new-answer', 'question_page');

          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          1928 у кіно

          Захаров Федір Захарович

          Ель Греко