c# - Easy way to select more than one field using LINQ -


take of sample object,

public class demo {     public string displayname { get; set; }      public int code1 { get; set; }      public int code2 { get; set; }      ... } 

and lets want put codes (code1, code2) in 1 list (ienumerable)... 1 way one:

var codes = demolist.select(item => item.code1).tolist(); codes.addrange(demolist.select(item => item.code2)); //var uniquecodes = codes.distinct(); // optional 

i know not nice neither optimal solution, curious know better approach / (best practice)?

linq not silver bullet kill everything

for intent i'd propose following

var codes = new list<int>(demolist.count * 2); foreach(var demo in demolist) {   codes.add(demo.code1);   codes.add(demo.code2); } 

benchmark

i did benchmark iterating list of 1 million , 1 thousand instances solution , ani's

amount: 1 million

mine : 2ms

ani's: 20ms

amount 1000 items

mine : 1ms

ani's: 12ms

the sample code

        list<myclass> list = new list<myclass>(1000);         (int = 0; < 100000; i++)         {             list.add(new myclass             {                 code1 = i,                 code2 = * 2,             });         }         system.diagnostics.stopwatch timer1 = system.diagnostics.stopwatch.startnew();         var resultlinq = list.selectmany(item => new[] { item.code1, item.code2 }).tolist();         console.writeline("ani's: {0}", timer1.elapsedmilliseconds);          system.diagnostics.stopwatch timer2 = system.diagnostics.stopwatch.startnew();         var codes = new list<int>(list.count * 2);         foreach (var item in list)         {             codes.add(item.code1);             codes.add(item.code2);         }         console.writeline("mine : {0}", timer2.elapsedmilliseconds);     } 

Comments

Popular posts from this blog

php - regexp cyrillic filename not matches -

c# - OpenXML hanging while writing elements -

sql - Select Query has unexpected multiple records (MS Access) -