LINQ to SQL многие ко многим выпускают - PullRequest
1 голос
/ 29 декабря 2011

У меня есть три таблицы со следующей упрощенной схемой:

Articles
    articleID
ArticleAuthors
    articleID
    authorID
Authors
    authorID

Статья может иметь более одного автора.

Учитывая входную статью, я хочу найти все другие статьинаписано авторами входной статьи.Итак, если Джо и Джилл напишут статью 1, я хочу, чтобы все остальные статьи были написаны Джо или Джилл.Мне нужно что-то для удовлетворения следующей функции:

public Article[] articlesBySameAuthors(Article article) {}

В SQL я бы просто сделал это:

SELECT * FROM Articles A 
INNER JOIN ArticleAuthors AA ON A.articleID = AA.articleID
WHERE AA.authorID IN (SELECT authorID FROM ArticleAuthors 
    WHERE articleID = @articleID) AND A.articleID <> @articleID;

Но я действительно хочу знать, как это сделать в LINQ to SQL.

Спасибо.

Ответы [ 4 ]

0 голосов
/ 29 декабря 2011

Что-то по этой линии ...

Var auth = db.ArticleAuthors.where(a=>a.Article == article).Select(Aa=>aa.author)

Var result = from aa in Db.articleauthors
              Were auth.Contains(aa.author)
    Select aa.Article
0 голосов
/ 29 декабря 2011

Эта функция псевдокода предполагает, что вы получили articles, articleAuthors и authors в другом месте:

Article[] ArticlesBySameAuthors(Article article)
{
    return
        (from a in articles
        where a.ArticleID = article.ArticleID
        join articleAuthor in articleAuthors on a.ArticleID equals articleAuthor.ArticleID
        join author in authors on articleAuthor.AuthorID equals author.AuthorID
        select author).ToArray();
}

РЕДАКТИРОВАТЬ:

предшествующее - продукт усталого ума.Вот еще один шаг:

Article[] ArticlesBySameAuthors(Article article)
{
    return
        (from a in articles
        where a.ArticleID = article.ArticleID
        join articleAuthor in articleAuthors on a.ArticleID equals articleAuthor.ArticleID
        join articleAuthor2 in articleAuthors on articleAuthor.AuthorID equals articleAuthor2.AuthorID
        join article2 in articles on articleAuthor2.ArticleID = article2.ArticleID
        where article2.ArticleID != article.ArticleID
        select article2).ToArray();
}

Или, если предположить, что тип Article имеет коллекцию Authors, и наоборот, следующее может сделать это:

Article[] ArticlesBySameAuthors(Article article)
{
    return
        (from author in article.Authors
        from article2 in author.Articles
        where article2.ArticleID != article.ArticleID
        select article2).ToArray();
}
0 голосов
/ 29 декабря 2011
var list = (
    from articleAuthor in articleAuthors 
    from article in articles 
    where articleAuthor.articleID == article.articleID 
    where (from aa in articleAuthors where aa.articleID == requested_article_id select aa.authorID).Contains( articleAuthor.authorID )
    select article).Distinct().ToList();
0 голосов
/ 29 декабря 2011

Помогают ли это?

Присоединяется

Вложенные группы

Дословный перевод был бы глупым - я бы предположил, что у вас есть лучшая структура объекта, чем эта. Если вам нужна более подробная информация о конкретной структуре объекта, опубликуйте ее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...