Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. C#
  4. Create a Collection in C#

Create a Collection in C#

Scheduled Pinned Locked Moved C#
databasecsharpdata-structuresquestion
17 Posts 4 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • M macca24

    I have a table in a database containing a number of records. The records have an ID number i.e. H1, H2, H3. Each record also contains a field called C1 which contains a value. There can be multiple records with the same ID. I want to read all the values of fields C1 for records with the ID H1 into an array. I don't know exactly how many records there are with the ID H1. I don't want to do this in SQL. Does anyone know how I would create a collection holding the values?

    P Offline
    P Offline
    Pete OHanlon
    wrote on last edited by
    #4

    It sounds to me like you're looking at having a Dictionary of Dictionaries like this:

    private Dictionary> dictionary = new Dictionary>();
    public void Add(string id, string fieldValue, ClassRepresentingOtherItems items)
    {
    if (!dictionary.ContainsKey(id))
    {
    Dictionary childDictionary = new Dictionary();
    dictionary.Add(id, childDictionary);
    }
    dictionary[id].Values.Add(fieldValue, items);
    }

    This allows you to associate many fields with the same ID.

    M 1 Reply Last reply
    0
    • M macca24

      Thanks for the reply OriginalGriff. What i want to do is add together all the values for each occurence of C1 and then to write this to a field. Can I do this with what you have suggested?

      OriginalGriffO Offline
      OriginalGriffO Offline
      OriginalGriff
      wrote on last edited by
      #5

      To add them together (assuming they are numeric), you don't even need a collection:

      SELECT SUM(C1) FROM MyTable WHERE ID = 'H1'

      Will return the total for you - and you can use ExecuteScalar to fetch the value directly without a reader or adapter.

      Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...

      "I have no idea what I did, but I'm taking full credit for it." - ThisOldTony
      "Common sense is so rare these days, it should be classified as a super power" - Random T-shirt

      M 1 Reply Last reply
      0
      • OriginalGriffO OriginalGriff

        To add them together (assuming they are numeric), you don't even need a collection:

        SELECT SUM(C1) FROM MyTable WHERE ID = 'H1'

        Will return the total for you - and you can use ExecuteScalar to fetch the value directly without a reader or adapter.

        Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...

        M Offline
        M Offline
        macca24
        wrote on last edited by
        #6

        I want to do this through C# though

        OriginalGriffO 1 Reply Last reply
        0
        • P Pete OHanlon

          It sounds to me like you're looking at having a Dictionary of Dictionaries like this:

          private Dictionary> dictionary = new Dictionary>();
          public void Add(string id, string fieldValue, ClassRepresentingOtherItems items)
          {
          if (!dictionary.ContainsKey(id))
          {
          Dictionary childDictionary = new Dictionary();
          dictionary.Add(id, childDictionary);
          }
          dictionary[id].Values.Add(fieldValue, items);
          }

          This allows you to associate many fields with the same ID.

          M Offline
          M Offline
          macca24
          wrote on last edited by
          #7

          I have no code written yet as I'm just looking for ideas. I am just reading the values in a field in records in a database table. There are multiple records with the value H1 and I want to get each value C1 in each record with ID H1. And then I would count the number of occurences of C1 from the records with ID H1. I am looking how to do this using C#

          1 Reply Last reply
          0
          • M macca24

            I want to do this through C# though

            OriginalGriffO Offline
            OriginalGriffO Offline
            OriginalGriff
            wrote on last edited by
            #8

            The just add the collection items together! Use a foreach loop, or even a Linq method:

            var sum = collection.Sum(item => item);

            Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...

            "I have no idea what I did, but I'm taking full credit for it." - ThisOldTony
            "Common sense is so rare these days, it should be classified as a super power" - Random T-shirt

            M 1 Reply Last reply
            0
            • OriginalGriffO OriginalGriff

              The just add the collection items together! Use a foreach loop, or even a Linq method:

              var sum = collection.Sum(item => item);

              Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...

              M Offline
              M Offline
              macca24
              wrote on last edited by
              #9

              Linq Method Would probably be the best as I have to write it out to a field. I'll put together some code and see what you think?

              OriginalGriffO 1 Reply Last reply
              0
              • M macca24

                Linq Method Would probably be the best as I have to write it out to a field. I'll put together some code and see what you think?

                OriginalGriffO Offline
                OriginalGriffO Offline
                OriginalGriff
                wrote on last edited by
                #10

                Sounds good!

                Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...

                "I have no idea what I did, but I'm taking full credit for it." - ThisOldTony
                "Common sense is so rare these days, it should be classified as a super power" - Random T-shirt

                M 1 Reply Last reply
                0
                • OriginalGriffO OriginalGriff

                  Sounds good!

                  Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...

                  M Offline
                  M Offline
                  macca24
                  wrote on last edited by
                  #11

                  Im trying to do something like this: var complexQuery = from e in orgContext.CreateQuery("Eval") join c in orgContext.CreateQuery("Contract") on e["contractid"] equals c["contractnameid"] I want to do a Count of the complexQuery and whatever the count is I want to add this to a variable so I can write this out to a field.

                  OriginalGriffO 1 Reply Last reply
                  0
                  • M macca24

                    Im trying to do something like this: var complexQuery = from e in orgContext.CreateQuery("Eval") join c in orgContext.CreateQuery("Contract") on e["contractid"] equals c["contractnameid"] I want to do a Count of the complexQuery and whatever the count is I want to add this to a variable so I can write this out to a field.

                    OriginalGriffO Offline
                    OriginalGriffO Offline
                    OriginalGriff
                    wrote on last edited by
                    #12

                    Um...you do realize that a Collection has a Count method?[^] So to get all the elements in your total sequence:

                    var complexQuery = from e in orgContext.CreateQuery("Eval")
                    join c in orgContext.CreateQuery("Contract")
                    on e["contractid"] equals c["contractnameid"];
                    int count = complexQuery.Count();

                    If you are trying to get the count of elements with matching ids (i.e. a collection of counts) then just Group the linq query and select the count of each group.

                    Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...

                    "I have no idea what I did, but I'm taking full credit for it." - ThisOldTony
                    "Common sense is so rare these days, it should be classified as a super power" - Random T-shirt

                    M 1 Reply Last reply
                    0
                    • OriginalGriffO OriginalGriff

                      Um...you do realize that a Collection has a Count method?[^] So to get all the elements in your total sequence:

                      var complexQuery = from e in orgContext.CreateQuery("Eval")
                      join c in orgContext.CreateQuery("Contract")
                      on e["contractid"] equals c["contractnameid"];
                      int count = complexQuery.Count();

                      If you are trying to get the count of elements with matching ids (i.e. a collection of counts) then just Group the linq query and select the count of each group.

                      Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...

                      M Offline
                      M Offline
                      macca24
                      wrote on last edited by
                      #13

                      Thanks for your help Ill try this.

                      OriginalGriffO 1 Reply Last reply
                      0
                      • M macca24

                        Thanks for your help Ill try this.

                        OriginalGriffO Offline
                        OriginalGriffO Offline
                        OriginalGriff
                        wrote on last edited by
                        #14

                        You're welcome!

                        Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...

                        "I have no idea what I did, but I'm taking full credit for it." - ThisOldTony
                        "Common sense is so rare these days, it should be classified as a super power" - Random T-shirt

                        1 Reply Last reply
                        0
                        • M macca24

                          I have a table in a database containing a number of records. The records have an ID number i.e. H1, H2, H3. Each record also contains a field called C1 which contains a value. There can be multiple records with the same ID. I want to read all the values of fields C1 for records with the ID H1 into an array. I don't know exactly how many records there are with the ID H1. I don't want to do this in SQL. Does anyone know how I would create a collection holding the values?

                          J Offline
                          J Offline
                          jschell
                          wrote on last edited by
                          #15

                          macca24 wrote:

                          I don't want to do this in SQL.

                          Why not? If the set is small, like say less than 100,000 than a query each time is likely to be best. If the set is large, like 10 billion, then dragging all of the records across the wire probably isn't a good idea. Which suggests you basic assumption of a solution is wrong and again SQL would probably be better for a real solution.

                          M 1 Reply Last reply
                          0
                          • J jschell

                            macca24 wrote:

                            I don't want to do this in SQL.

                            Why not? If the set is small, like say less than 100,000 than a query each time is likely to be best. If the set is large, like 10 billion, then dragging all of the records across the wire probably isn't a good idea. Which suggests you basic assumption of a solution is wrong and again SQL would probably be better for a real solution.

                            M Offline
                            M Offline
                            macca24
                            wrote on last edited by
                            #16

                            It is only for a very small number of records around 50-100.

                            J 1 Reply Last reply
                            0
                            • M macca24

                              It is only for a very small number of records around 50-100.

                              J Offline
                              J Offline
                              jschell
                              wrote on last edited by
                              #17

                              Then as I suggested - do the query.

                              1 Reply Last reply
                              0
                              Reply
                              • Reply as topic
                              Log in to reply
                              • Oldest to Newest
                              • Newest to Oldest
                              • Most Votes


                              • Login

                              • Don't have an account? Register

                              • Login or register to search.
                              • First post
                                Last post
                              0
                              • Categories
                              • Recent
                              • Tags
                              • Popular
                              • World
                              • Users
                              • Groups