帮助linq加入
我在linq中有下面的表达式,它是一个连接,我选择进入J,因为我以后需要使用J,目前我只选择J,但一旦我有了这个固定的表达式,我计划在以后的另一个子查询中使用J 但它不允许我提供一个使用V侧的示例,因此V.I办公室无效。 我试过在连接处交换,结果我不能使用GVT 通过指定它工作的位置,我非常完美,但我需要指定2个表中的位置。。。因此,IdOffice和IdTariff都在各自的表格中。。他们不都是帮助linq加入,linq,linq-to-sql,inner-join,Linq,Linq To Sql,Inner Join,我在linq中有下面的表达式,它是一个连接,我选择进入J,因为我以后需要使用J,目前我只选择J,但一旦我有了这个固定的表达式,我计划在以后的另一个子查询中使用J 但它不允许我提供一个使用V侧的示例,因此V.I办公室无效。 我试过在连接处交换,结果我不能使用GVT 通过指定它工作的位置,我非常完美,但我需要指定2个表中的位置。。。因此,IdOffice和IdTariff都在各自的表格中。。他们不都是 (from gvt in Tariffs join v in Items on gvt.IdGro
(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为的记录和一个包含尽可能多关税的字段——如果这有意义的话
}
我工作得很好
如果能够使用像这样的扩展方法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,我可以这样做,但查询不在where中
谢谢。由于您使用了into,因此您在这里进行了一次群组加入。这意味着对于每个gvt,您没有一个项目,但可能有几个或没有。所有项目的列表以IEnumerable的形式存储在j中。如果要选择至少有一个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 }
}
谢谢PAvel,我更新了我的原始问题,基本上是我想要达到的目标,你会看到我在更进一步地使用J。。这有用吗?非常感谢这很有效!,我不知道上次我能否打扰你一次。。我需要使用扩展方法扩展查询。。我将更新我的问题,以便我可以使用代码格式…我已经更新了我的原始问题,我想我已经正确地解释了它。。。。感谢您的持续帮助…为了更具体地说明item.IdOffice,我可以使用一个简单的扩展方法,这样我可以使用扩展方法传递一个值,因此原始查询可以重新调用所有内容,使用ext方法,我可以说WithOffice1例如,您可以从我的答案中的查询中删除where,然后,在扩展方法中的Id字段上进行筛选。但是,您需要定义一个命名类型,因为您不能声明方法扩展或不接受匿名类型的参数;你能澄清关于它的问题是什么吗?谢谢Pavel,我将在代码中插入并尝试检查扩展方法,如果可以的话,我会很快回来检查。。再次感谢