0

linq(結合)に次の式があり、後でJを使用する必要があるため、「J」を選択しています(現在、Jを選択するだけですが、これを修正したら、後で別のサブクエリ内でJを使用する予定です)

ただし、「V」側を使用する場所を指定できないため、v.IdOFficeは無効です。結合を入れ替えてみましたが、「GVT」を使用できません。

完璧に機能する場所を指定しますが、2つのテーブルに存在する2つの場所を指定する必要があります...したがって、IdOfficeとIdTariffはそれぞれのテーブルにあります..両方ではありません...。

(from gvt in Tariffs
join v in Items
on gvt.IdGroupItem equals v.IdGroupItem 
into j
where v.IdOffice == 1 && gvt.IdTariff == 111
select j).Take(50)

おそらく何かばかげている、それは私がどこで使用することができない結合の後に指定されたテーブルに表示されますか?

何か案は?

ありがとう

これは基本的に私が達成しようとしていることです

from gvt in Tariffs
  join v in Items
  on gvt.IdGroupItem equals v.IdGroupItem 
  into j
  where v.IdOffice == 1 && gvt.IdTariff == 111
  select new
  {
      id = v.IdItem
      Tariff = from j
      {
    test = j.TariffDesc,
        test1 = j.TariffPrice
      }

基本的に、Idとフィールド内に同じ数の料金が含まれる1つのレコードになります-これが理にかなっている場合はどうなりますか?

}

クエリはうまく機能し、

このように拡張メソッド(c#)を使用できると便利です...これは可能であるため、動的に料金を設定できます...たとえば、クエリを実行し、拡張メソッドを使用します(すでに使用しています)単純なクエリの場合)

    public static IQueryable<Models.ItemTariffCol> WithTariffId(this IQueryable<Models.ItemTariffCol> qry, int tariffId)
    {
        return from t in qry
               where t.IdTarifa == tariffId
               select t;
    }

これはそれを非常に拡張可能にしますか?私がこれを行うことができるが、クエリがどこにないのが普通の場合

ありがとうございました。

4

1 に答える 1

1

を使用しているため、ここでグループ参加を行っていますinto。これは、すべての に対して、 がgvt1 つでItemはなく、場合によっては複数 (またはまったくない) であることを意味します。すべてのアイテムのリストはj、 として に保存されIEnumerable<Item>ます。の項目が少なくとも 1 つあるすべての関税を選択する場合はIdOffice == 1、次のように実行できます。

from gvt in Tariffs
join v in Items
     on gvt.IdGroupItem equals v.IdGroupItem 
     into j
where gvt.IdTariff == 111 && j.Any(v => v.IdOffice == 1)
...

回答の編集後、あなたも間違った方向から始めたようです-私が見る限り、すべての関税のアイテムのリストではなく、すべてのアイテムの関税のリストが必要です。そのためには、結合を逆にする必要があります。

from item in Items
join tariff in Tariffs
     on item.IdGroupItem equals tariff.IdGroupItem 
     into tariffs
where item.IdOffice == 1
select new
{
    Id = item.IdItem,
    Tariffs = from tariff in tariffs
              where tariff.IdTariff == 111
              select new { tariff.TariffDesc, tariff.TariffPrice }
}

または、結合で関税を直接フィルタリングできます。

from item in Items
join tariff in (from t in Tariffs where t.IdTariff == 111 select t)
     on item.IdGroupItem equals tariff.IdGroupItem 
     into tariffs
where item.IdOffice == 1
select new
{
    Id = item.IdItem,
    Tariffs = from tariff in tariffs
              select new { tariff.TariffDesc, tariff.TariffPrice }
}
于 2009-10-29T20:10:33.853 に答える