[英]LINQ equivalent for SQL
我正在嘗試將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
和Table1
Table2
對應於ADO.NET實體框架的對象System.Data.Objects.ObjectSet
。
像這樣:
context.Table1
.Where( o => o.Table2s.Any( o2 =>
o2.fk_attrib1 == '123' &&
o2.fk_attrib2 == '345' ) )
.OrderBy( o => o.attrib1 )
.ToList();
順便說一句, LINQPad非常適合嘗試L2E查詢。
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;
這應該對您有所幫助。 我想主要的問題在於JOIN
子句-在EF
您可以使用NavigationProperties
,而不必擔心JOIN
表的問題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);
希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.