LINQ to SQL Right Outer Join

IanK.CO

I have a SQL Query that I'm having trouble converting to LINQ query:

SELECT DISTINCT Nodes.NodeName, NodeConfig.IPAddresses, NodeConfig.InSCOM, NodeConfig.InOrion, NodeConfig.OrionCustomerName, NodeConfig.OrionApplication, NodeConfig.NodeID
FROM            Tags INNER JOIN
                     TagToNode ON Tags.TagID = TagToNode.TagID RIGHT OUTER JOIN
                     NodeConfig INNER JOIN
                     Nodes ON NodeConfig.NodeID = Nodes.NodeID ON TagToNode.NodeID = NodeConfig.NodeID
WHERE        (NodeConfig.Session = '7/3/2014 1:46:33 PM') AND (NodeConfig.InSCOM = 0)

That returns 1076 rows.

I tried to write the LINQ equivalent:

var list1 = (from t in mldb.Tags
                    join tn in mldb.TagToNodes on t.TagID equals tn.TagID into tagJoin
                    from tj in tagJoin.DefaultIfEmpty()
                    join nc in mldb.NodeConfigs on tj.NodeID equals nc.NodeID
                    join n in mldb.Nodes on nc.NodeID equals n.NodeID
                    where (nc.Session == @"7/3/2014 1:46:33 PM") && (nc.InSCOM == 0)
                    select new { Customer = nc.OrionCustomerName, DeviceName = n.NodeName, DeviceType = nc.OrionApplication, IPAddress = nc.IPAddresses, NodeID = n.NodeID }).Distinct().ToList();

That returns 183 rows.

I have tried converting the query to inner joins as suggested by some when I searched for solutions on this site. The original query implements a SQL "RIGHT OUTER JOIN" which from what I've read left/right isn't supported in LINQ but joins can be done.

The tables that I'm pulling from have primary keys as follows:

[DataServiceKey(new string[] { "NodeID", "TagID" })]
public partial class TagToNode { }

[DataServiceKey(new string[] { "NodeID" })]
public partial class Node { }

[DataServiceKey(new string[] { "TagID" })]
public partial class Tag { }

[DataServiceKey(new string[] { "ConfigID" })]
public partial class NodeConfig { }

The relationship is that Nodes have many NodeConfigs, and many Nodes are Tagged with many tags.

Can someone help me with the query logic?

IanK.CO

OK so I took a step back and restructured the query. I created an inner join first, and then left-joined that to the main query.

I have a list of computers in a data base that are "tagged" in my application. I wanted to be able to search the tag names in the database via the many-to-many relationship between a tag and a device, where I have a join table in the middle named "TagToNode".

The distinct selection just weeds out the dupes in the end, the idea is to get ALL of the computers (nodes) even if they're not tagged with anything.

LINQ

var tags = (from tn in mldb.TagToNodes
                        join t in mldb.Tags on tn.TagID equals t.TagID
                        select new { tn.TagID, tn.NodeID, t.TagName, t.AssocUser });
            return (from nc in mldb.NodeConfigs
                    join n in mldb.Nodes on nc.NodeID equals n.NodeID
                    join t in tags on n.NodeID equals t.NodeID into nj
                    from tg in nj.DefaultIfEmpty()
                    where nc.Session == sc.SessionName && n.NodeActive == 1 && ((tg.TagName.Contains(sc.SearchTerm) && (tg.AssocUser.Contains(windowsId) || (tg.AssocUser == null || tg.AssocUser == ""))) || (n.NodeName.Contains(sc.SearchTerm)) || (nc.OrionCustomerName.Contains(sc.SearchTerm)) || (nc.IPAddresses.Contains(sc.SearchTerm)))
                    select new NodeInfo { Customer = nc.OrionCustomerName, DeviceName = n.NodeName, DeviceType = nc.OrionApplication, IPAddress = nc.IPAddresses, NodeID = n.NodeID }).Distinct().ToList();

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

From Dev

LINQ to SQL Right Outer Join

From Dev

Linq to object Right outer join

From Dev

Performing a right outer join with a group by using linq

From Dev

LINQ: How to perform a RIGHT OUTER JOIN?

From Dev

Right outer join in linq to entities query

From Dev

How to write a LEFT OUTER JOIN where the right side is null in LINQ to SQL?

From Dev

How to write a LEFT OUTER JOIN where the right side is null in LINQ to SQL?

From Dev

Convert SQL (LEFT OUTER JOIN) to LinQ

From Dev

Convert SQL (Left Outer Join's) to LINQ

From Dev

Translate SQL to LINQ using LEFT OUTER JOIN

From Dev

HQL right outer join

From Dev

Converting SQL to LINQ (inner join into a left outer join) C#

From Dev

Converting SQL to LINQ (inner join into a left outer join) C#

From Dev

SQL Syntax For Right Outer JOIN in SQL Server 2012

From Dev

Right Outer Join to Left Outer join

From Dev

full outer join or right outer join

From Dev

Multiple outer Linq join

From Dev

Linq outer join with conditions

From Dev

Left outer join in SQL with data missing in right table

From Dev

Right Outer Join with OR condition and Null in where clause -SQL SERVER

From Dev

Sql right outer join ignore all null rows

From Dev

Unable to convert SQL Query to LINQ Query for Left Outer Join

From Dev

LINQ to Sql Left Outer Join with Group By and Having Clause

From Dev

Conversion Of left Outer join with a where clause to Linq-to-sql

From Dev

How do I convert this SQL outer join to LINQ

From Java

Select MAX and RIGHT OUTER JOIN

From Dev

MySQL right outer join query

From Dev

Use a filter in an outer join in linq

From Dev

Nullable Int in LINQ with outer join

Related Related

HotTag

Archive