1

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

谢谢

4

1 回答 1

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 to Dataset 的细节,但它看起来像这样。

于 2012-07-24T18:36:40.957 回答