c# - How to Merge the List in Linq Query -


i have linq queries,when run queries got result,which shown in img below

var salesinvdets = (from si in customertransactions                             si.transtypeid == 10                             group new {si} new{          month=si.period==1?"jan-2015":si.period==2?"feb-2015":si.period==3?"mar-2015":si.period==4?"apr-2015":si.period==5?"may-2015":                                 si.period==6?"jun-2015":si.period==7?"jul-2015":si.period==8?"aug-2015":si.period==9?"sep-2015":si.period==10?"oct-2015":                                 si.period==11?"nov-2015":si.period==12?"dec-2015":"",            month2=si.period==13?"jan-2016":si.period==14?"feb-2016":si.period==15?"mar-2016":si.period==16?"apr-2016":si.period==17?"may-2016":                                 si.period==18?"jun-2016":si.period==19?"jul-2016":si.period==20?"aug-2016":si.period==21?"sep-2016":                                 si.period==22?"oct-2016":si.period==23?"nov-2016":si.period==24?"dec-2016":"",                             period=si.period                             } g                                 select new                             {                                     month=g.key.month,                                 month2=g.key.month2,                                 amount = g.sum(x=>x.si.ovamount)//.sum(x=>x.si.ovamount-(x.si.ovdiscount+x.si.ovfreight))//(si.ovamount - (si.ovdiscount + si.ovfreight))                             }).dump(); 

i got result during run query,but dont need that

linq error

i need result that,pls achieve task

result img

issue exist due faulty groupby statement, based on value of si.period, 1 of values specified in month , month2, therefore in each grouping either month or month2 empty string "", both never filled, result have shown, solution same separate grouping based on month , month2, follows:

var salesinvdetsmonthlist = (from si in customertransactions                             si.transtypeid == 10                             group new {si} new{          month=si.period==1?"jan-2015":si.period==2?"feb-2015":si.period==3?"mar-2015":si.period==4?"apr-2015":si.period==5?"may-2015":                                 si.period==6?"jun-2015":si.period==7?"jul-2015":si.period==8?"aug-2015":si.period==9?"sep-2015":si.period==10?"oct-2015":                                 si.period==11?"nov-2015":si.period==12?"dec-2015":"",                                 period=si.period                             } g                                 select new                             {                                     month=g.key.month                                 amount = g.sum(x=>x.si.ovamount)//.sum(x=>x.si.ovamount-(x.si.ovdiscount+x.si.ovfreight))                             }).where( x => x.month != "").tolist(); // removing empty month values / default values   var salesinvdetsmonth2list = (from si in customertransactions                             si.transtypeid == 10                             group new {si} new{          month2=si.period==13?"jan-2016":si.period==14?"feb-2016":si.period==15?"mar-2016":si.period==16?"apr-2016":si.period==17?"may-2016":                                 si.period==18?"jun-2016":si.period==19?"jul-2016":si.period==20?"aug-2016":si.period==21?"sep-2016":                                 si.period==22?"oct-2016":si.period==23?"nov-2016":si.period==24?"dec-2016":"",                             period=si.period                             } g                                 select new                             {                                     month=g.key.month,                                 month2=g.key.month2,                                 amount2 = g.sum(x=>x.si.ovamount)//.sum(x=>x.si.ovamount-(x.si.ovdiscount+x.si.ovfreight))//(si.ovamount - (si.ovdiscount + si.ovfreight))                             }).where( x => x.month != "").tolist(); // removing empty month values / default values 

now need merge 2 lists created above:

salesinvdetsmonthlist, salesinvdetsmonth2list 

for assume, have same number of records,, need combined entity like:

public class salesinvdetsmonthcombined {   public string month {get; set;}   public string month2 {get; set;}   public int amount {get; set;}   public int amount2 {get; set;} }  int totalcount = salesinvdetsmonthlist.count;  list<salesinvdetsmonthcombined> result = new list<salesinvdetsmonthcombined>();  (int index=0, index < totalcount; index ++) {   result.add(new salesinvdetsmonthcombined                 ( month = salesinvdetsmonthlist[index].month,                   month2 = salesinvdetsmonth2list[index].month2,                   amount = salesinvdetsmonthlist[index].amount,                   amount2 = salesinvdetsmonth2list[index].amount2                 )); } 

however please note, above code based on assumption have provided, there matching records, in case there's discrepancy in number of records, need add default, else fail


Comments