лямбда-выражение для запроса по двум таблицам, которое возвращает записи из одной таблицы - PullRequest
0 голосов
/ 03 мая 2010

У меня есть две таблицы

TableA (articles)
int id
int Type
string name

и

TableB (compatibles)
int linked_ID
int tableA_ID

TableA records:
id=1, Type=0, name="ArticleA"
id=2, Type=1, name="ArticleB"
id=3, Type=2, name="ArticleC"
id=4, Type=1, name="ArticleD"

TableB records:
linked_ID= 1, tableA_ID=2
linked_ID= 1, tableA_ID=3
linked_ID= 1, tableA_ID=4

В TableB есть список дуг, которые совместимы с определенной статьей. Я совершенно новичок в запросах (пока не нуждался в них в моих проектах). Но так как C # и WPF допускают довольно классную автоматизацию с Binding, я хотел бы добавить привязку, которая возвращает следующее:

Дайте мне все статьи, которые относятся к типу 1 и совместимы с моей выбранной статьей (id = 1).

Простая часть работает хорошо (у статей есть список всех статей):

private ObservableCollection<Article> _articles = 
    new ObservableCollection<Article>();

[заполните его доступными статьями] а затем:

comboBoxArticles.ItemsSource = 
    _articles.AsBindable().Where( c => c.Typ == 0 );

Как расширить предложение Where для запроса другой таблицы?

Заранее большое спасибо.

1 Ответ

0 голосов
/ 03 мая 2010

Похоже, что вы хотите "объединить" две "таблицы" с помощью Linq. Вот кое-что, с чего можно начать:

comboBoxArticles.ItemsSource =
    from article in _articles
    from compatible in _compatibles
    where article.Type == 0 && && article.id == compatible.tableA_ID && compatible.linked_ID == 1
    select article;

... или в цепочке методов ...

comboBoxArticles.ItemsSource = _articles
    .SelectMany(article => _compatibles, (article, compatible) => new {article, compatible})
    .Where(@t => @t.article.Type == 0 && @t.article.id == @t.compatible.tableA_ID && @t.compatible.linked_ID == 1)
    .Select(@t => @t.article);
...