使用Entity Framework查找

时间:2012-03-07 02:24:54

标签: c# entity-framework linq entity-framework-4

我正在尝试使用Entity Framework查找交叉2个表但遗憾的是我找不到方法但是我确实有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

如果@ Value1 = 6则结果= 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 个答案:

答案 0 :(得分:4)

连接(您的查询使用SQL的隐式连接语法)在Linq中与实体看起来非常相似:

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属性中你的问题是否存在拼写错误,因此不清楚它是否归因于LookupTablelookupTablePerUnit

答案 1 :(得分:2)

这样的事情(希望你使用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();

contextObjectContext实例。LookupTable请注意,实体框架可能会错误地复制您的实体名称,因此LookupTablePerUnitLookupTables实际上可能类似lookupTablePerUnitsObjectContext lookupTablePerUnit(和{{} 1}}可以大写。)