c# - Complex Query LINQ Lambda -


i trying extract data in single query. since involves many tables, sort of stuck @ grouping part.

i not have enough reputation post image of table design. so, giving pk,fk

 sector (sectorid)  device (deviceid:pk, categoryid:fk)  ratio (sectorid,deviceid)  use (useid)  deviceuse (sectorid,deviceid,useid)  family (familyid)  category (categoryid)  level (levelid)  age(ageid)  consu (sectorid,deviceid,levelid)  distributionone (sectorid,deviceid,levelid)  distributiontwo (sectorid,deviceid,levelid, ageid) 

what trying achieve is:

given sectorid, retrieve related information tables given.

the result be:

all devices

grouped family

grouped category

and ratios (for given sectorid , deviceid)

and deviceuses (for related sectorid , deviceid) , related use deviceid

and consu (for related deviceid, levelid, ageid) , related age , level

and distributionone (for related deviceid, levelid, sectorid) , related level

and distributiontwo (for related deviceid, levelid, sectorid, ageid) , related age , level

so far got method below.

public ienumerable<userconfig> getdevicetype(int sectorid)     {         var t = repo.getall().asqueryable()                             .select(             c => new userconfig             {                 device = new device { name = c.name, id = c.id },                 distributionone = c.distributionone.where(d => d.sectorid == sectorid && d.deviceid == c.id).tolist(),                 distributiontwo = c.distributiontwo.where(d => d.sectorid == sectorid && d.deviceid == c.id).tolist(),                 consu = c.consu.where(d=>d.deviceid == c.id).tolist(),                 category = c.category,                 family = c.category.family,                 deviceuse = c.deviceuse.where(d => d.sectorid == sectorid && d.deviceid == c.id).tolist(),                 ratios = c.ratios.where(d => d.sectorid == sectorid && d.deviceid == c.id).tolist(),                 use = c.deviceuse.where(d=>d.deviceid==c.id && d.sectorid==sectorid).select(u=>u.use).firstordefault()             });                 var devices = t.tolist();         return devices;     } 

where repo repository of device

getall repository method set of devices.

my questions:

  • am doing right way?

  • if yes, how group data nested collection of

families
->categories
--->devices
distributionone
distributiontwo
..etc

  • if not, need correct (my table design?, query?)

use groupby operator:

var t = repo.getall().asqueryable() .groupby(c => c.category.family.id) .select(g => new {     familyid = g.key,     devicesbycategory = g.groupby(c => c.category.id)         .select(g2 => new {             categoryid = g2.key,             devices = g2.select(c => new userconfigs {                 ....         })    }) }); 

Comments

Popular posts from this blog

commonjs - How to write a typescript definition file for a node module that exports a function? -

openid - Okta: Failed to get authorization code through API call -

ios - Change Storyboard View using Seague -