我正在尝试从另一个表中查找列的值,然后在where子句中使用新的查找值。例如,我有下面的表格
ID Name
1 Jan
2 Feb
3 March
Product Customer Start End
A C Feb March
A B Jan March
B C March Jan
在上面的示例中,我需要查询Start ID大于End 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"]
};
由于
答案 0 :(得分:1)
假设ID定义的名称晚于另一名称。蒂姆在评论中的问题可能是因为,首先,使用名称值作为您的链接而不是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的具体细节,但它看起来就像那样。