簡體   English   中英

相當於SQL的LINQ

[英]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對象的集合。 在此, Table1Table1 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;

編輯:
我假設在Table1Table2之間存在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM