简体   繁体   中英

Counting in a Linq Query

I have a fairly complicated join query that I use with my database. Upon running it I end up with results that contain an baseID and a bunch of other fields. I then want to take this baseID and determine how many times it occurs in a table like this:

TableToBeCounted (One to Many)
{
     baseID,
     childID
}

How do I perform a linq query that still uses the query I already have and then JOINs the count() with the baseID?

Something like this in untested linq code:

from k in db.Kingdom
join p in db.Phylum on k.KingdomID equals p.KingdomID
where p.PhylumID == "Something"
join c in db.Class on p.PhylumID equals c.PhylumID
select new {c.ClassID, c.Name};

I then want to take that code and count how many orders are nested within each class. I then want to append a column using linq so that my final select looks like this:

select new {c.ClassID, c.Name, o.Count()}//Or something like that.

The entire example is based upon the Biological Classification system.

Assume for the example that I have multiple tables:

Kingdom
|--Phylum
    |--Class
       |--Order

Each Phylum has a Phylum ID and a Kingdom ID. Meaning that all phylum are a subset of a kingdom. All Orders are subsets of a Class ID. I want to count how many Orders below to each class.

select new {c.ClassID, c.Name, (from o in orders where o.classId == c.ClassId select o).Count()}

Is this possible for you? Best I can do without knowing more of the arch.

If the relationships are as you describe:

  var foo = db.Class.Where(c=>c.Phylum.PhylumID == "something")
                    .Select(x=> new { ClassID = x.ClassID, 
                                      ClassName = x.Name, 
                                      NumOrders= x.Order.Count})
                    .ToList();

Side question: why are you joining those entities? Shouldn't they naturally be FK'd, thereby not requiring an explicit join?

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM