John Gardner
John Gardner

Reputation: 25146

How do i get an inner join in a WCF Data Service

Lets say i have 2 tables, table1 and table2, with a shared key "id"

if i want an inner join of those two tables using sql, i'd do something like

select id, x, y, z
from table1
inner join table2
on table1.id = table2.id

I now get rows in table 1 that only intersect occur in table 2.

how do i get the equivalent in wcf data service/odata linq syntax?

i'm expecting something like:

var q = (from t in svc.Table1.Expand("Table2")
    where t.Table2.Any()
    select t) as DataServiceQuery<Table1>;

but that gets me an exception about Any().
I've tried .Join and that isn't supported either. I've tried .Count and that fails too.
.Intersect looks like it only takes another enumerable, so that doesn't look like what i want...

i think i'm missing something really obvious or simple...

Edit: this appears to be a dup of this How do I use OData Expand like a SQL join?

Upvotes: 0

Views: 7815

Answers (4)

Vitek Karas MSFT
Vitek Karas MSFT

Reputation: 13320

Currently the OData protocol (and thus WCF Data Services) doesn't support any/all operations. It also doesn't support arbitrary joins, although some joins can be expressed as navigations. Your query is currently not supported, but we're looking into adding support for the any/all operations. Take a look at this proposal if that would fulfill your needs: http://www.odata.org/blog/support-for-any-and-all

Upvotes: 1

MarkGr
MarkGr

Reputation: 1068

The more recent releases of WCF Data Services now include Any/All support. See What's New in WCF Data Services 5.0

Upvotes: 1

CodeMonkeyKing
CodeMonkeyKing

Reputation: 4642

Take a look at the answers to this type of question. The current version of WCF Data Services (OData) does not support joins even if your underlying data contract does (i.e. if you're layering on top of Entity Framework 4 for instance).

Upvotes: 2

Schultz9999
Schultz9999

Reputation: 8936

Is WCF in play here? To link two objects from two tables/lists, I'd do this:

var result = 
  from o1 in Table1
  join o2 in Table2 on o2.id equals o1.id

Upvotes: 0

Related Questions