dynamically define key name for which the value needs to be identified











up vote
3
down vote

favorite












I have a keyvalue pair list some thing like this



 List<Subscriptions> subs = new List<Subscriptions>();
subs.Add(new Subscriptions() { Id = 1, Name = "ABC" });
subs.Add(new Subscriptions() { Id = 1, Name = "DEF" });


I can search against one key (ID or Name) but what I want to achieve is that user define which key they want to search against ID or Name



right now i am using this approach to filter the list based on Name Value



 var filtered = subs.Where(sub => sub.Name.IndexOf(SearchString.Text,StringComparison.OrdinalIgnoreCase) >=0);


sub.Name is defined statically here, I want the user to choose what they want their search to be based on



for example if we have abc:Name program search for abc under Name key and if we have 1:Id then it search for 1 in ID.
This is just an example , in real scenario i can have multiple fields in my list.
I hope I am able to make myself clear.










share|improve this question




























    up vote
    3
    down vote

    favorite












    I have a keyvalue pair list some thing like this



     List<Subscriptions> subs = new List<Subscriptions>();
    subs.Add(new Subscriptions() { Id = 1, Name = "ABC" });
    subs.Add(new Subscriptions() { Id = 1, Name = "DEF" });


    I can search against one key (ID or Name) but what I want to achieve is that user define which key they want to search against ID or Name



    right now i am using this approach to filter the list based on Name Value



     var filtered = subs.Where(sub => sub.Name.IndexOf(SearchString.Text,StringComparison.OrdinalIgnoreCase) >=0);


    sub.Name is defined statically here, I want the user to choose what they want their search to be based on



    for example if we have abc:Name program search for abc under Name key and if we have 1:Id then it search for 1 in ID.
    This is just an example , in real scenario i can have multiple fields in my list.
    I hope I am able to make myself clear.










    share|improve this question


























      up vote
      3
      down vote

      favorite









      up vote
      3
      down vote

      favorite











      I have a keyvalue pair list some thing like this



       List<Subscriptions> subs = new List<Subscriptions>();
      subs.Add(new Subscriptions() { Id = 1, Name = "ABC" });
      subs.Add(new Subscriptions() { Id = 1, Name = "DEF" });


      I can search against one key (ID or Name) but what I want to achieve is that user define which key they want to search against ID or Name



      right now i am using this approach to filter the list based on Name Value



       var filtered = subs.Where(sub => sub.Name.IndexOf(SearchString.Text,StringComparison.OrdinalIgnoreCase) >=0);


      sub.Name is defined statically here, I want the user to choose what they want their search to be based on



      for example if we have abc:Name program search for abc under Name key and if we have 1:Id then it search for 1 in ID.
      This is just an example , in real scenario i can have multiple fields in my list.
      I hope I am able to make myself clear.










      share|improve this question















      I have a keyvalue pair list some thing like this



       List<Subscriptions> subs = new List<Subscriptions>();
      subs.Add(new Subscriptions() { Id = 1, Name = "ABC" });
      subs.Add(new Subscriptions() { Id = 1, Name = "DEF" });


      I can search against one key (ID or Name) but what I want to achieve is that user define which key they want to search against ID or Name



      right now i am using this approach to filter the list based on Name Value



       var filtered = subs.Where(sub => sub.Name.IndexOf(SearchString.Text,StringComparison.OrdinalIgnoreCase) >=0);


      sub.Name is defined statically here, I want the user to choose what they want their search to be based on



      for example if we have abc:Name program search for abc under Name key and if we have 1:Id then it search for 1 in ID.
      This is just an example , in real scenario i can have multiple fields in my list.
      I hope I am able to make myself clear.







      c# list keyvaluepair






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 12 at 9:25

























      asked Nov 12 at 9:07









      FizzaTahir

      274




      274
























          2 Answers
          2






          active

          oldest

          votes

















          up vote
          2
          down vote













          Why you don't apply the Where by an simple if else or switch



          // keyword : abc:Name or  1:Id
          var value = keyword.Split(':')[0];
          var key = keyword.Split(':')[1];

          if(key == "Name")
          {
          var filterred = subs.Where(sub => sub.Name == value);
          }
          else if(key == "Id")
          var filterred = subs.Where(sub => sub.id == int.Parse(value));
          }





          share|improve this answer





















          • this is a good approach if I only have two fields , but what if I have more than 2 field to search against ? it will be too many code lines then. I want it to be dynamic
            – FizzaTahir
            Nov 12 at 9:24










          • With a switch, you can add many fields that you want. I think you don't have other solution simpler
            – Antoine V
            Nov 12 at 9:27


















          up vote
          2
          down vote













          Fast answer:



          string name = "";
          int? id = null;

          List<Subscriptions> subs = new List<Subscriptions>();

          var query = subs.AsQueryable();
          if (!string.IsNullOrEmpty(name))
          query = query.Where(p => p.Name == name);
          if(id.HasValue)
          query = query.Where(p => p.id == id.Value);

          var result = query.ToArray();


          Detailed answer: you can read about expression tree and IQueriable interface



          basicly you can avoid to cast your list to IQueriable if you not use something like Entity Frmework od OData. But if you need to convert you LINQ expression to something more complexivity - you should use IQueriable, or build your own Expression Tree.






          share|improve this answer





















            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',
            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%2f53258883%2fdynamically-define-key-name-for-which-the-value-needs-to-be-identified%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            2 Answers
            2






            active

            oldest

            votes








            2 Answers
            2






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes








            up vote
            2
            down vote













            Why you don't apply the Where by an simple if else or switch



            // keyword : abc:Name or  1:Id
            var value = keyword.Split(':')[0];
            var key = keyword.Split(':')[1];

            if(key == "Name")
            {
            var filterred = subs.Where(sub => sub.Name == value);
            }
            else if(key == "Id")
            var filterred = subs.Where(sub => sub.id == int.Parse(value));
            }





            share|improve this answer





















            • this is a good approach if I only have two fields , but what if I have more than 2 field to search against ? it will be too many code lines then. I want it to be dynamic
              – FizzaTahir
              Nov 12 at 9:24










            • With a switch, you can add many fields that you want. I think you don't have other solution simpler
              – Antoine V
              Nov 12 at 9:27















            up vote
            2
            down vote













            Why you don't apply the Where by an simple if else or switch



            // keyword : abc:Name or  1:Id
            var value = keyword.Split(':')[0];
            var key = keyword.Split(':')[1];

            if(key == "Name")
            {
            var filterred = subs.Where(sub => sub.Name == value);
            }
            else if(key == "Id")
            var filterred = subs.Where(sub => sub.id == int.Parse(value));
            }





            share|improve this answer





















            • this is a good approach if I only have two fields , but what if I have more than 2 field to search against ? it will be too many code lines then. I want it to be dynamic
              – FizzaTahir
              Nov 12 at 9:24










            • With a switch, you can add many fields that you want. I think you don't have other solution simpler
              – Antoine V
              Nov 12 at 9:27













            up vote
            2
            down vote










            up vote
            2
            down vote









            Why you don't apply the Where by an simple if else or switch



            // keyword : abc:Name or  1:Id
            var value = keyword.Split(':')[0];
            var key = keyword.Split(':')[1];

            if(key == "Name")
            {
            var filterred = subs.Where(sub => sub.Name == value);
            }
            else if(key == "Id")
            var filterred = subs.Where(sub => sub.id == int.Parse(value));
            }





            share|improve this answer












            Why you don't apply the Where by an simple if else or switch



            // keyword : abc:Name or  1:Id
            var value = keyword.Split(':')[0];
            var key = keyword.Split(':')[1];

            if(key == "Name")
            {
            var filterred = subs.Where(sub => sub.Name == value);
            }
            else if(key == "Id")
            var filterred = subs.Where(sub => sub.id == int.Parse(value));
            }






            share|improve this answer












            share|improve this answer



            share|improve this answer










            answered Nov 12 at 9:12









            Antoine V

            4,9912424




            4,9912424












            • this is a good approach if I only have two fields , but what if I have more than 2 field to search against ? it will be too many code lines then. I want it to be dynamic
              – FizzaTahir
              Nov 12 at 9:24










            • With a switch, you can add many fields that you want. I think you don't have other solution simpler
              – Antoine V
              Nov 12 at 9:27


















            • this is a good approach if I only have two fields , but what if I have more than 2 field to search against ? it will be too many code lines then. I want it to be dynamic
              – FizzaTahir
              Nov 12 at 9:24










            • With a switch, you can add many fields that you want. I think you don't have other solution simpler
              – Antoine V
              Nov 12 at 9:27
















            this is a good approach if I only have two fields , but what if I have more than 2 field to search against ? it will be too many code lines then. I want it to be dynamic
            – FizzaTahir
            Nov 12 at 9:24




            this is a good approach if I only have two fields , but what if I have more than 2 field to search against ? it will be too many code lines then. I want it to be dynamic
            – FizzaTahir
            Nov 12 at 9:24












            With a switch, you can add many fields that you want. I think you don't have other solution simpler
            – Antoine V
            Nov 12 at 9:27




            With a switch, you can add many fields that you want. I think you don't have other solution simpler
            – Antoine V
            Nov 12 at 9:27












            up vote
            2
            down vote













            Fast answer:



            string name = "";
            int? id = null;

            List<Subscriptions> subs = new List<Subscriptions>();

            var query = subs.AsQueryable();
            if (!string.IsNullOrEmpty(name))
            query = query.Where(p => p.Name == name);
            if(id.HasValue)
            query = query.Where(p => p.id == id.Value);

            var result = query.ToArray();


            Detailed answer: you can read about expression tree and IQueriable interface



            basicly you can avoid to cast your list to IQueriable if you not use something like Entity Frmework od OData. But if you need to convert you LINQ expression to something more complexivity - you should use IQueriable, or build your own Expression Tree.






            share|improve this answer

























              up vote
              2
              down vote













              Fast answer:



              string name = "";
              int? id = null;

              List<Subscriptions> subs = new List<Subscriptions>();

              var query = subs.AsQueryable();
              if (!string.IsNullOrEmpty(name))
              query = query.Where(p => p.Name == name);
              if(id.HasValue)
              query = query.Where(p => p.id == id.Value);

              var result = query.ToArray();


              Detailed answer: you can read about expression tree and IQueriable interface



              basicly you can avoid to cast your list to IQueriable if you not use something like Entity Frmework od OData. But if you need to convert you LINQ expression to something more complexivity - you should use IQueriable, or build your own Expression Tree.






              share|improve this answer























                up vote
                2
                down vote










                up vote
                2
                down vote









                Fast answer:



                string name = "";
                int? id = null;

                List<Subscriptions> subs = new List<Subscriptions>();

                var query = subs.AsQueryable();
                if (!string.IsNullOrEmpty(name))
                query = query.Where(p => p.Name == name);
                if(id.HasValue)
                query = query.Where(p => p.id == id.Value);

                var result = query.ToArray();


                Detailed answer: you can read about expression tree and IQueriable interface



                basicly you can avoid to cast your list to IQueriable if you not use something like Entity Frmework od OData. But if you need to convert you LINQ expression to something more complexivity - you should use IQueriable, or build your own Expression Tree.






                share|improve this answer












                Fast answer:



                string name = "";
                int? id = null;

                List<Subscriptions> subs = new List<Subscriptions>();

                var query = subs.AsQueryable();
                if (!string.IsNullOrEmpty(name))
                query = query.Where(p => p.Name == name);
                if(id.HasValue)
                query = query.Where(p => p.id == id.Value);

                var result = query.ToArray();


                Detailed answer: you can read about expression tree and IQueriable interface



                basicly you can avoid to cast your list to IQueriable if you not use something like Entity Frmework od OData. But if you need to convert you LINQ expression to something more complexivity - you should use IQueriable, or build your own Expression Tree.







                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Nov 12 at 9:13









                Sergey Shulik

                678824




                678824






























                    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.





                    Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


                    Please pay close attention to the following guidance:


                    • 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%2f53258883%2fdynamically-define-key-name-for-which-the-value-needs-to-be-identified%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

                    Bressuire

                    Vorschmack

                    Quarantine