2012-07-24 65 views
1

我想從另一個表中查找列的值,然後在我的where子句中使用新查找的值。例如,我有以下Linq從一個表分配值到另一個

ID Name 
1  Jan 
2  Feb 
3  March 

Product Customer Start End 
    A   C  Feb March 
    A   B  Jan March 
    B   C  March Jan 

下表在上面的例子中,我需要查詢的記錄列表,其中起始ID不是結束ID更大。例如,B-C-March-Jan是我正在尋找的記錄。 我應該使用連接嗎?另外,如果可能的話,查詢語法會非常有用。

我的查詢:

var vInvalidStartEnd = from p in vRecords 
         where (from t in vTimePeriods where t.Name == p["Start"] select t.TID).First().Cast<int>() > (from t in vTimePeriods where t.TName == p["End"] select t.ID).First().Cast<int>() 
         select new 
         { 
          Product = p["Product"], 
          Location = p["Location"], 
          Start = p["Start"], 
          End = p["End"] 
         }; 

感謝

+1

開始和結束'DateTimes'或'字符串?這是C#,Linq-To-SQL或Linq-To-DataSet或Linq-To-Entities還是...?你有什麼嘗試? – 2012-07-24 17:40:15

+0

嗨,開始和結束是字符串,這是Linq-To-Dataset。我將用我當前的查詢更新我的帖子。謝謝 – user320587 2012-07-24 17:51:16

+0

@TimSchmelter我用我的查詢更新了這篇文章。 – user320587 2012-07-24 18:19:32

回答

1

假設ID定義什麼名字後來比另一個是。 Tim在評論中的問題可能是因爲,首先,將名稱值用作鏈接而不是ID,其次,ID很難說明哪個月比另一個月大。如果我按照您的方式使用月份名稱,我可能會在vTimePeriods表中有一個id,一個名稱,然後是一個訂單值。

from p in vRecords 
join start in vTimePeriods on p["Start"] equals start["Name"] 
join end in vTimePeriods on p["End"] equals end["Name"] 
where (int)end["ID"] < (int)start["ID"] 
select new 
{ 
    Product = p["Product"], 
    Location = p["Location"], 
    Start = p["Start"], 
    End = p["End"] 
}; 

我不知道Linq到Dataset的具體情況,但它看起來像這樣。

+0

是的Bert。我同意。我不應該使用ID並且可能使用了諸如Priority或其他值 – user320587 2012-07-24 18:48:46