2016-12-13 23 views
0

如果我的問題沒有得到很好的解釋,我很抱歉。 想知道是否有可能達到例如使用sql而不是使用linq的外鍵連接表。 也許我會舉個例子。linq/entity與.ToList()一樣,以相同的方式達到連接表約束乾淨的SQL

假設我有兩張表CustomersTowns,其中fk約束來自Towns表。 現在使用LINQ拿東西都在同一時間我就可以做到這一點

using(DbContext db = new DbContext()){ 
    var customers = db.customers.ToList(); 

    //Then I can reach easy colums of towns just like that 
    List<string> lt = new List<string>(); 
    foreach(var item in customers){ 
     lt.add(item.customers.towns.nameofthetown.ToString()); 
    } 
} 

的問題是,如何做,在正常SQLReader的?或者是它的東西只有你能使用LINQ /實體

確定這裏做是例如情況下,類

public class Customers{ 
    public int ID{get;set;} 
    public string Name{get;set;} 
    pulic string Surname{ get;set} 
} 
public class Towns{ 
    public int ID{get;set;} 
    public string NameOfTheTown{get;set} 
    public int FkID{get;set;} 
} 

現在.. Customes是父表,城鎮是一個孩子。 如何與使用清潔的SQL(合併?)無論是在一個列表中的那些表的 - 名單,只是我做的例子在上面使用LINQ

我想,因爲這item.customers.towns.nameofthetown.ToString()相同的效果,而無需使用LINQ

+0

你想寫一個SQL查詢,做一個連接..?也許你可以看看使用像linqpad這樣的應用程序,它可以將linq轉換成普通的sql,或者只要你知道你需要加入的密鑰就可以寫出sql查詢。 – MethodMan

+0

@MethodMan事情是用內部連接我做SqlReader我可以'把它(或者我只是不知道如何)兩個不同的表兩個列表,這是我們的情況列表,我不得不將內部加入城市的東西,而不是自己的表像linq這樣的一個表中做它,我想知道是否有可能做到這一點與普通的Sql沒有使用Linq /實體 – Harugawa

+0

爲什麼你不能使用單個SqlReader連接2個表..?這只是一個SQL查詢您是否熟悉如何編寫連接 – MethodMan

回答

0
var customers = db.customers.ToList(); 

此行加載整個客戶表到內存中,它與

SELECT * FROM Customers 

foreach(var item in customers){ 
    lt.add(item.customers.towns.nameofthetown.ToString()); 
} 
完成

這個循環加載相關鎮一行在每個迭代的客戶,這是與完成:

SELECT nameofthetown FROM town WHERE fkId = @customerId 

注:這是不好的性能往返的數據庫中循環的每個迭代。