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

上記の例では、開始IDが終了IDよりも大きいレコードのリストを照会する必要があります。たとえば、BC-3月-1月は私が探しているレコードです。参加を使用する必要がありますか?また、可能であれば、クエリ構文が非常に役立ちます。

私の質問:

 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は、どの月が別の月よりも大きいかを示すのに不十分です。月の名前を現在のように使用する必要がある場合、おそらくID、名前、そしてvTimePeriodsテーブルの注文値があります。

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 に答える