Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
?
Solved

Linq-to-SQL "order by" child table values and return custom type

Posted on 2010-11-18
2
Medium Priority
?
1,143 Views
Last Modified: 2013-11-11
Simple set of 4 tables that link together: Projects -> Versions -> Marketshares -> Countries

Linq to SQL class has been set up to that each subsequent table as shown above is an entity set of the one before with ALL being one to many from parent to child except Marketshares -> Countries which is one to one.

If a list (of project) is returned then it's possible to iterate through the other tables on the linked values and all works well.

However, one particular query requires that I return only those projects where a particular element matches a filter setting on the marketshare table. This is fine and I can happily select the matching projects. Unfortunately I need to return a custom list and this means I need access to the values in marketshare and countries. But as these are one-to-many relationships, I cannot directly do something like:
p.project.version.marketshare.countries.countryname as I need the element index of some items such as p.project(0).versions(0).marketshare.countries.countryname but that is obviously not the right way to go about this...

So basically there is a value in marketshare called marketdestination and this links to an id in countries from which I pull the countryname. Assuming that I have the query correct (and the query below works for selection) then how do I specify that I want to sort the results by countryname from countries and return marketdestination and countryname in the query please?

thisList = (From p In pdc.tblProjects _
Where p.tblProjectVersions.Any(Function(t) t.tblProjectVersionMarketShares.Any(Function(tt) tt.marketDestination = lf.marketDestination))) _ And p.isDeleted = False _
Order By p.tblProjectVersions.FirstOrDefault.tblProjectVersionMarketShares.FirstOrDefault.tblCountries.CountryName Ascending _ 
Select New genListItem With {.listID = p.tblProjectVersions.FirstOrDefault.tblProjectVersionMarketShares.FirstOrDefault.marketDestination, .listValue = .tblProjectVersions.FirstOrDefault.tblProjectVersionMarketShares.FirstOrDefault.tblCountries.CountryName}).Distinct().ToList

Open in new window


I tried using "firstordefault" but it doesn't work...
0
Comment
Question by:carled
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
2 Comments
 
LVL 16

Accepted Solution

by:
Stephan earned 2000 total points
ID: 34214334
You are trying to use many-to-many relationships within linq-to-sql.... many-to-many is not supported, linq to entities has this possibility.

Try to devide your query using "var". I'm not really into the VB.NET so it is hard for me to read.

If you put your query till the orderby statement and put this in a separate var, then create the select from the var you created.

Take a look at this:
http://stackoverflow.com/questions/1097992/linq-to-entities-many-to-many-select-query
0
 
LVL 1

Author Closing Comment

by:carled
ID: 34214362
Many thanks, helped greatly!
0

Featured Post

What is SQL Server and how does it work?

The purpose of this paper is to provide you background on SQL Server. It’s your self-study guide for learning fundamentals. It includes both the history of SQL and its technical basics. Concepts and definitions will form the solid foundation of your future DBA expertise.

Question has a verified solution.

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

IP addresses can be stored in a database in any of several ways.  These ways may vary based on the volume of the data.  I was dealing with quite a large amount of data for user authentication purpose, and needed a way to minimize the storage.   …
Wouldn’t it be nice if you could test whether an element is contained in an array by using a Contains method just like the one available on List objects? Wouldn’t it be good if you could write code like this? (CODE) In .NET 3.5, this is possible…
Have you created a query with information for a calendar? ... and then, abra-cadabra, the calendar is done?! I am going to show you how to make that happen. Visualize your data!  ... really see it To use the code to create a calendar from a q…
In this video, Percona Solution Engineer Dimitri Vanoverbeke discusses why you want to use at least three nodes in a database cluster. To discuss how Percona Consulting can help with your design and architecture needs for your database and infras…

705 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