2013-01-17 134 views
1

我有2個表MaxDates和MinDates,每個表都有一個DateTime列。我可以寫創建含有最小和最大日期的所有組合的數據集的目標以下數據庫SELECT查詢(計算時間跨度):使用LINQ選擇2個表(不加入)使用LINQ

SELECT MinDates.PriceDate, MaxDates.PriceDate 
FROM MinDates, MaxDates 

我是新來的LINQ,並希望創建相當於LINQ。我認爲以下將是一個很好的起點,但沒有運氣。

var result = from MaxDates, MinDates 
      select MaxDates.PriceDate, MinDates.PriceDate 

什麼等價LINQ語句應該有什麼想法,這是LINQ一個良好的使用(VS只是在做這個使用一些陣列)?

+0

提防,查詢生成笛卡爾積 –

+2

請注意你在說什麼*是一個連接*。您不使用單詞「JOIN」的事實不會改變這一點。 – 2013-01-17 14:08:04

+0

感謝大家的意見和更正。通過進行一些名稱更改,我能夠實施D Stanley和其他人提出的方法。 – PT83

回答

2

你接近:

var result = from max in MaxDates 
      from min in MinDates 
      select new {MaxDate = max.PriceDate, MinDate = min.PriceDate}; 

這會給你笛卡爾乘積(CROSS JOIN),你要尋找的。

2

笛卡爾乘積(或CROSS在SQL世界JOIN)在LINQ是:

var crossResult = from max in MaxDates 
        from min in MinDates 
        select new { maxPriceDate = max.PriceDate, minPriceDate = min.PriceDate}; 
+0

這將不會編譯,因爲您的匿名類型的兩個字段具有相同的名稱('PriceDate') –

+0

@DStanley的權利,糾正。 –

0

通過使用擴展方法,

var results = MaxDates.SelectMany(x => MinDates, (x, y) => new {x, y}); 
1
var res = from max in MaxDates 
        from min in MinDates 
        select new { MaxPriceDate = max.PriceDate, 
           MinPriceDate = min.PriceDate}; 
+1

這不會編譯,因爲您的匿名類型的兩個字段具有相同的名稱('PriceDate') –

+0

@DStanley感謝您的糾正。 – MuhammadHani