Solved

Questions Tags Users Badges Unanswered Ask Question

Posted on 2011-09-15
1
42,818 Views
Last Modified: 2012-05-12
I have the following datatable, which has Units information. The Units have a surface in square meters. However the units can be split into subunits, in the datatable there is a ParentUnitID to know if that unit is splitted or not.

I need to validate that the sum of the surface of the child units, is equal to the surface of the parent unit.

 bWJwN.png

In anoter forum they helped me with this code


 var childrenByParentID = _unitDataSet.Unit.AsEnumerable().
                                     GroupBy(child => child.Field<int?>("ParentUnitId")).
                                     ToDictionary(group => group.Key);

            // Parents = children with no parent
            var parents = childrenByParentID[null];

            // Look for the first group which sum of surfaces is not the same as the parent's surface
            var invalidGroup = childrenByParentID.FirstOrDefault(group =>
            {
                bool invalid = false;

                if (group.Key != null)
                {
                    // Not the parents group
                    var parent = parents.Single(parent => parent.Field<int>("UnitID") == group.Key);

                    var totalSurface = group.Sum(group => group.Field<int>("Surface"));
                    invalid = (totalSurface != parent.Field<int>("Surface"));
                }

                return invalid;
            });

            if (invalidGroup != null)
            {
                // .. do something special
            }

Open in new window


However I got this error.

 dlaxL.png
0
Comment
Question by:Simbios
1 Comment
 
LVL 4

Accepted Solution

by:
guramrit earned 500 total points
ID: 36541297
There're some common mistakes in this code. You've to change it->

change
  var parent = parents.Single(parent => parent.Field<int>("UnitID") == group.Key);
to
  var parent = parents.Single(p => p.Field<int>("UnitID") == group.Key);

change
    var totalSurface = group.Sum(group => group.Field<int>("Surface"));
to
    var totalSurface = group.Sum(g => g.Field<int>("Surface"));

last thing, you cannot compare object of KeyValuePair<,> with null, because its a Structure (valuetype) returned by following code
   invalidGroup = childrenByParentID.FirstOrDefault ......

try using ToLookup instead of ToDictionary

0

Featured Post

Gigs: Get Your Project Delivered by an Expert

Select from freelancers specializing in everything from database administration to programming, who have proven themselves as experts in their field. Hire the best, collaborate easily, pay securely and get projects done right.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

ASP.Net to Oracle Connectivity Recently I had to develop an ASP.NET application connecting to an Oracle database.As I am doing it first time ,I had to solve several problems. This article will help to such developers  to develop an ASP.NET client…
This article is for Object-Oriented Programming (OOP) beginners. An Interface contains declarations of events, indexers, methods and/or properties. Any class which implements the Interface should provide the concrete implementation for each Inter…
Windows 10 is mostly good. However the one thing that annoys me is how many clicks you have to do to dial a VPN connection. You have to go to settings from the start menu, (2 clicks), Network and Internet (1 click), Click VPN (another click) then fi…
The Email Laundry PDF encryption service allows companies to send confidential encrypted  emails to anybody. The PDF document can also contain attachments that are embedded in the encrypted PDF. The password is randomly generated by The Email Laundr…

808 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question