Linq将值从一个表分配给另一个表

时间:2012-07-24 17:38:45

标签: linq join

我正在尝试从另一个表中查找列的值,然后在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"]
                        };

由于

1 个答案:

答案 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的具体细节,但它看起来就像那样。