Как получить внутреннее соединение в службе данных WCF - PullRequest
0 голосов
/ 02 февраля 2011

Допустим, у меня есть 2 таблицы, table1 и table2, с общим ключом "id"

Если я хочу внутреннее объединение этих двух таблиц с использованием sql, я бы сделал что-то вроде

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

Теперь я получаю строки в таблице 1, которые пересекаются только в таблице 2.

как получить эквивалент в синтаксисе службы данных wcf / odata linq?

яожидал что-то вроде:

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

, но я получаю исключение по поводу Any().
Я пробовал .Join, и это тоже не поддерживается.Я попробовал .Count, и это тоже не удалось.
.Intersect похоже, что требуется только другое перечисляемое, так что это не похоже на то, что я хочу ...

я думаю, что яотсутствует что-то действительно очевидное или простое ...

Редактировать: это похоже на дублирование этого Как использовать OData Expand как SQL-соединение?

Ответы [ 4 ]

2 голосов
/ 03 февраля 2011

Посмотрите на ответы на этот тип вопрос .Текущая версия Служб данных WCF (OData) не поддерживает объединения, даже если ваш базовый контракт данных поддерживает (например, если вы работаете над Entity Framework 4, например).

1 голос
/ 29 апреля 2013

Более поздние выпуски WCF Data Services теперь включают поддержку Any / All.См. Что нового в службах данных WCF 5.0

1 голос
/ 03 февраля 2011

В настоящее время протокол OData (и, следовательно, службы данных WCF) не поддерживает какие-либо / все операции. Он также не поддерживает произвольные объединения, хотя некоторые объединения могут быть выражены как навигация. Ваш запрос в настоящее время не поддерживается, но мы планируем добавить поддержку операций any / all. Посмотрите на это предложение, если оно будет соответствовать вашим потребностям: http://www.odata.org/blog/support-for-any-and-all

0 голосов
/ 02 февраля 2011

WCF здесь в игре? Чтобы связать два объекта из двух таблиц / списков, я бы сделал это:

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