LINQ эквивалент для SQL - PullRequest
       27

LINQ эквивалент для SQL

0 голосов
/ 04 января 2012

Я пытаюсь преобразовать проект ASP.NET в платформу Entity. Как переписать следующий запрос в эквивалент LINQ?

SELECT {Table1 objects}
FROM [Table1] tb1
INNER JOIN [Table2] tb2
ON tb1.Table1ID = tb2.fk_Table1ID
WHERE tb2.fk_attrib1 = '123' AND tb2.fk_attrb2 = '345'
ORDER BY tb1.attrib1

В результате получается коллекция Table1 объектов. Здесь Table1 и Table2 соответствуют объекту System.Data.Objects.ObjectSet ADO.NET Entity Framework.

Ответы [ 4 ]

2 голосов
/ 04 января 2012
var results = from tb1 in Context.Table1
                join tb2 in Context.Table2 on tb1.Table1ID == tb2.fk_Table1ID
                where tb2.fk_attrib1 == "123" && tb2.fk_attrb2 == "345"
                orderby tb1.attrib1
                select tb1;
2 голосов
/ 04 января 2012

Примерно так:

context.Table1
    .Where( o => o.Table2s.Any( o2 =>
        o2.fk_attrib1 == '123' &&
        o2.fk_attrib2 == '345' ) )
    .OrderBy( o => o.attrib1 )
    .ToList();

Кстати, LINQPad отлично подходит для тестирования запросов L2E.

1 голос
/ 04 января 2012

Это должно помочь вам немного. Я предполагаю, что основная проблема связана с предложением JOIN - в EF вы можете использовать NavigationProperties и вам не нужно беспокоиться о присоединении к таблицам - EF позаботится об этом за вас.

Также вы пытаетесь отфильтровать столбец из объединенной таблицы. Это можно сделать, используя метод Any, чтобы найти все элементы Table1, которые связаны с Table2, где эти ссылочные элементы имеют определенные свойства / столбцы. Вам также следует ознакомиться с методом All, так как он может пригодиться вам в будущем.

from t1 in context.Table1
where t1.Table2s.Any(t2.fk_attrib1 == "123" && t2 => t2.fk_attrb2 == "345")
order by t1.attrib1
select t1;

Edit:
Я предполагаю, что существует 1:n связь между Table1 и Table2, которая приводит к перечисляемой коллекции как NavigationProperty в Table1 объектах.

Edit2:
Исправлена ​​ошибка в коде - не заметил, что оба атрибута от Table2, а не Table1

0 голосов
/ 04 января 2012

Должно ли быть примерно таким:

var result = (from tb1  in Table1
                from tb2 in Table2
                      where tb1.Key == tb2.Key && 
                                 tb2.fk_attrib1 = '123' && 
                                   tb2.fk_attrb2 = '345'
            select ione).OrderBy(p=>p.attrib1);

Надеюсь, это поможет.

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