【问题标题】:LINQ; forcing a new {} to return Iqueryable?LINQ;强制一个新的 {} 返回 Iqueryable?
【发布时间】:2010-12-12 00:56:49
【问题描述】:

我写了一个小查询,在 Linqpad 中运行良好,但是(见下文)关税没有作为 Iqueryable 返回,有人知道如何解决这个问题吗?

基本上看Tariffs = new ....,

from v in House
join gvt in
    (from t in MyTariffs where t.Id == 3 select t)
on v.IdTariff equals gvt.Id
select new
{
   Id = v.Id,
   Tariffs = new
   { 
     Deposit = gvt.CurrentDeposit
   }
}

我确实尝试过,但它无效,因为 gvt 不是表格或其他东西?

from v in House
join gvt in
    (from t in MyTariffs where t.Id == 3 select t)
on v.IdTariff equals gvt.Id
select new
{
   Id = v.Id,
   Tariffs = from x in gvt   // NOTICE i am doing from x in gvt... But it fails..
   select new
   { 
     Deposit = gvt.CurrentDeposit
   }
}

当然 gvt 只包含我想要的值,因为它有内部连接...

我可以直接从我的 MyTariffs 中提取(它可以返回 Iqueryable),但是我有太多信息,因为它没有考虑到我在 gvt 中所做的加入?

from v in House
join gvt in
    (from t in MyTariffs where t.Id == 3 select t)
on v.IdTariff equals gvt.Id
select new
{
   Id = v.Id,
   Tariffs = from x in MyTariffs // THIS has nothing to do with my join
   select new
   { 
     Deposit = gvt.CurrentDeposit
   }
}

【问题讨论】:

  • 重复stackoverflow.com/questions/1647079 - 再次问完全相同的问题并不是一个好主意。我仍然希望能够再看看你的问题。
  • 对不起,乔恩,我一直在左右和中间拉东西,并提出了一个完全不同的新查询...好的,我将把问题分配为已关闭...

标签: c# linq linq-to-sql inner-join


【解决方案1】:

选择子查询中的数据 -- 您确定 Id == 3 和 Id == v.IdTariff吗?如果确实如此,那么您可以在外部查询中添加一个 where 子句,以便在 v.IdTariff == 3 时仅选择 v。不过,我假设您想要所有这些。

var q = from v in House
        select new {
            Id = v.Id,
            Tariffs = (from g in MyTariffs
                       where g.Id == v.IdTariff
                       select g.CurrentDeposit)
        };

分组示例(未编译/未经测试),以响应您的 cmets。

var q = from v in House
        join g in (from t in MyTariffs where t.Id == 3 select t)
        group by v.Id into gvt
        select new {
            Id = gvt.Key,
            Tariffs = gvt.g
        };

【讨论】:

  • 感谢 tvanfosson!问题是我有一些更复杂的连接进一步......不可能做我正在做的事情吗??
  • 嗨..我也做了一些测试......似乎把子句放在 where 这样需要更长的时间来处理......我想这是合乎逻辑的,因为我是从 MyTariffs 中选择的是一个没有任何连接的完整表。我的查询需要 7 秒,而我的原始查询不返回 Iqueryable,而 where 则需要 13 秒......
  • 如果您想从连接中的第二个表中获得可查询的集合,您可能需要对 Id 列进行分组,然后针对分组的元素进行查询。
  • 您好,感谢您的 cmets,我接受了答案,因为我有它的工作..再次感谢..
猜你喜欢
  • 2017-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-27
  • 1970-01-01
  • 2011-04-08
相关资源
最近更新 更多