0

Below is my code:

sFieldList.Select(y => "Sum(Convert.ToDouble(iif(it[\""+y+"\"] == @0,0,it[\""+y+"\"]))) as "+y)and then 

var newSort = dataTable
                .AsEnumerable()
                .AsQueryable()
                .GroupBy("new("+gField+")", "it")
                .Select("new("+sField+",it.Key as Key, it as Data)",DBNull.Value);

I wish to round of the result of Sum() method above to 2 decimal digits. How can I add it in this query itself?

Incredible
  • 3,495
  • 8
  • 49
  • 77

2 Answers2

0

Hopefully I'm understanding your problem correctly, but as far as I can tell, you just need an additional Select()

    var roundedSums = list.Select(x => "some dynamic query on x")
                          .Select(x => Math.Round(x, 2);

By chaining multiple Selects(), you are simply projecting your original set on a record to record basis.

If this isn't what you're looking for, we may need a bit more clarification.

FLGMwt
  • 706
  • 4
  • 18
0

Somehow dynamic linq does not always understand the numbers in terms of their, so try this:

sFieldList.Select(y => "Sum(Math.Round(Convert.ToDouble(iif(it[\""+y+"\"] == @0,0,it[\""+y+"\"])),@1)) as "+y)

and then

var newSort = dataTable
            .AsEnumerable()
            .AsQueryable()
            .GroupBy("new("+gField+")", "it")
            .Select("new("+sField+",it.Key as Key, it as Data)",DBNull.Value,2);
Grundy
  • 13,356
  • 3
  • 35
  • 55