(сложный?) запрос LINQtoSQL - PullRequest
0 голосов
/ 21 июля 2011

У меня есть две таблицы: Designs и Urls.Дизайн может быть связан со многими URL-адресами через Guid (который не является первичным ключом таблицы Design, поскольку URL-адрес также может быть связан с другими таблицами через тот же столбец).

Design (table)
-------
DesignGuid

URL (table)
------
RelationalGuid
UrlString

В своем коде я пытаюсь определить, требует ли какая-то информация, которую мне предоставляется, создание новой записи Design, или она соответствует существующей записи Design.Информация включает в себя список URL-адресов.Эти URL-адреса являются единственным способом определить, нужно ли создавать новую запись или нет.

var localUrlStrings = new List<string>() { "urlString1", "urlString2" }

Итак, мне нужно взять список URL-адресов, которые мне даны, и написать запрос, который просматривает существующие записи Design и связанные с ними URL-адреса и возвращает совпадение, если IFF-URL-адресасоответствовать точно.Поэтому, если мне дается 2 URL в моем коде, мне нужно найти только те дизайны (должны быть либо 1, либо 0 совпадений), которые точно связаны с 2 URL, которые точно соответствуют 2, которые у меня есть в коде.

Спасибо, Джеромейер

Ответы [ 2 ]

2 голосов
/ 22 июля 2011

Если я правильно понимаю вашу проблему, я думаю, вам нужен запрос SQL, который выглядит примерно так:

SELECT d.DesignGuid
FROM Design AS d
INNER JOIN URL as u ON d.DesignGuid = u.RelationalGuid
WHERE u.UrlString IN ('urlstring1', 'urlstring2', ... ,'urlstringn')

Я думаю, что-то вроде этого должно работать:

var localUrlStrings = new List<string>() { "urlString1", "urlString2" }

var result = 
    from d in Design
    from u in URL
    where d.DesignGuid == u.RelationalGuid
    && localUrlStrings.Contains(u.UrlString)
    select new {
        d.DesignGuid,
        u.UrlString
    });

Редактировать: Вы ищете это:

SELECT d.DesignGuid, count(u.URL) as numURLs
FROM Design as d,
     Url as u
WHERE d.DesignGuid = u.RelationalGuid
HAVING count(u.URL) = 2

Я не могу проверить это прямо сейчас, но я верю, что это должно сработать (синтаксис может быть немного неправильным, я дважды проверю это утром):

var result = 
    from d in dataContext.Designs
    join u in dataContext.URLs on d.DesignGuid equals u.RelationalGuid into joinTable
    from j in joinTable
    where localUrlStrings.Contains(j.UrlString)
    group j by j.RelationalGuid into groupTable
    where groupTable.Count() == localUrlStrings.Count
    select groupTable.Key;
0 голосов
/ 21 июля 2011

try (не совсем уверен, какой именно результат нужен):

var Result = from d in Design from u in URL from l in localUrlStrings 
             where d.DesignGuid == u.RelationalGuid and 
             l == u.UrlString select new { l, d.DesignGuid };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...