2013-07-03 62 views
0

我在編寫LINQ查詢時遇到了問題。 這裏的情景:使用LINQ查詢進行排序問題並使用來自不同數據庫的表進行連接

我有2個數據庫:A和B 在數據庫答:我有一個的TableX它具有以下字段:僱員ID,姓名,地址,電話,...,主動

在數據庫B:我有具有以下字段的tableY:僱員ID,可見,訂單

在數據表Y的記錄數是在表X.小於或等於的記錄數

基本上,我需要從表X中提取具有「可見」屬性的表X中的員工記錄(在表中Y)設置爲True,並希望使用'Order'屬性對它們進行排序。

這是我到目前爲止有:

ADataContext dbA = new ADataContext(); 
BDataContext dbB = new BDataContext(); 

//Get the list of records from tableY where 'Visbile' is set to True 
var List = dbB.tableY 
        .Where(x => x.Visible == true).OrderBy(x => x.Order) 
        .ToList(); 

//Extract the list of employee IDs 
IEnumerable<int> ids = List.Select(x => x.EmployeeID).Distinct(); 


var employees = dbA.tableX 
        .Where(x => ids.Contains(x.EmployeeID) && x.Active == true) 
        .ToList(); 

我能夠得到員工的正確的列表,但無法弄清楚如何在TableX的 應用排序順序(存在於tableY)目前,無論tableY中指定的順序如何,從tableX返回的記錄按照在表中輸入的順序排序(從最舊到最新)。

任何想法如何我可以修復我的查詢。

感謝,

回答

0

我重新寫它作爲一個單一查詢:

var employees = 
    from x in dbA.tableX 
    where x.Active 
    from y in dbB.tableY 
    where x.EmployeeID == y.EmployeeID 
    orderby y.Order 
    select x; 
+0

感謝您的快速回復!我嘗試了你的建議,但是「.OrderBy(x => x.Order)」語句不起作用,因爲「訂單」列沒有在tableX中定義:( – mustang888

+0

我已經更新了上面的示例以使用單個連接。 ,你在TableX的條目中進行選擇,過濾掉所有非活動條目,然後在TableY的條目中進行選擇,並將它們與它們的X對應關係進行匹配,最後,您可以訂購併返回X值。 –

相關問題