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
      }

基本上,我最终得到了 1 条带有 Id 的记录和一个包含尽可能多关税的字段 - 如果这有意义吗?

}

查询工作得很好,

能够像这样使用扩展方法(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;
    }

这使它非常可扩展?如果它是正常的,我可以在哪里执行此操作,但查询不在 where

谢谢你。

4

1 回答 1

1

由于您使用的是into. 这意味着对于每个gvt,您都没有一个Item,但可能有几个(或没有)。所有项目的列表存储在j, 作为IEnumerable<Item>. 如果你想选择至少有一个项目的所有关税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 回答