Поиск с использованием Entity Framework - PullRequest
2 голосов
/ 07 марта 2012

Я пытаюсь выполнить поиск по двум таблицам, используя Entity Framework, к сожалению, я не смог найти способ, но у меня есть SQL-запрос, который делает то, что я хочу

SQL-запрос

select top(1) p1.Percentage
from LookupTable p1 , [lookupTablePerUnit] p2
where p2.[LookupValue] <= @Value1  and p1.ID=p2.[LookupID]
order BY pr.range DESC

if @ Value1 = 6 then Результат = 52

Вот снимок экрана с двумя таблицами (lookupTable && LookTablePerUnit), использующими этот запрос

(SELECT * FROM [DB].[dbo].[lookupTablePerUnit] p1 , [DB].[dbo].[LookupTable] p2
where p1.LookupTableID = p2.ID)

http://s15.postimage.org/m80zvn4mx/Captur2e.png

Ответы [ 2 ]

4 голосов
/ 07 марта 2012

Объединение (ваш запрос использует неявный синтаксис объединения для SQL) будет выглядеть очень похоже в Linq to Entities:

var query = from p1 in context.LookupTable 
            join p2 in context.lookupTablePerUnit on p1.ID equals p2.LookupID
            where p2.LookupValue <= Value1
            orderby p1.range descending
            select p1.Percentage;

var result = query.FirstOrDefault();

Пришлось угадать свойство range, в котором у вас есть опечатка, поэтому неясно, можно ли ее отнести к LookupTable или lookupTablePerUnit

2 голосов
/ 07 марта 2012

Примерно так (надеюсь, вы используете C #):

int value1 = 6;
int percentage = (from p1 in context.LookupTable
                 from p2 in context.lookupTablePerUnit
                 where p2.LookupValue <= value1 and p1.ID=p2.LookupID
                 orderby p2.range descending
                 select p1.Percentage).First();

Где context - ваш ObjectContext экземпляр. Обратите внимание, что Entity Framework может ошибочно плюрализировать имена ваших сущностей, поэтому LookupTable и LookupTablePerUnit могут фактически быть чем-то вроде LookupTables и lookupTablePerUnits в вашем ObjectContextlookupTablePerUnit может быть написан заглавными буквами).

...