相当于SQL的LINQ
本文关键字:LINQ SQL 相当于 | 更新日期: 2023-09-27 18:19:20
我正在尝试转换ASP。. NET项目到实体框架。如何将下面的查询重写为它的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
对应ADO的对象System.Data.Objects.ObjectSet
。. NET实体框架。
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;
像这样:
context.Table1
.Where( o => o.Table2s.Any( o2 =>
o2.fk_attrib1 == '123' &&
o2.fk_attrib2 == '345' ) )
.OrderBy( o => o.attrib1 )
.ToList();
顺便说一句,LINQPad非常适合尝试L2E查询。
这应该会对您有所帮助。我想主要问题是JOIN
子句-在EF
中,你可以使用NavigationProperties
,不需要担心连接表- EF
将为你照顾。
您还试图从连接表中筛选列。这可以使用Any
方法来查找连接到Table2
的所有Table1
元素,其中这些引用元素具有某些属性/列。您还应该熟悉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;
编辑:
我假设Table1
和Table2
之间存在1:n
关系,这导致Table1
对象中的NavigationProperty
可枚举集合。
Edit2:
修正了代码中的错误-没有注意到这两个属性都来自Table2
而不是Table1
应该是这样吗?
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);