【问题标题】:Exclude LINQ results from one query in another LINQ query在另一个 LINQ 查询中排除一个查询的 LINQ 结果
【发布时间】:2017-11-08 10:31:40
【问题描述】:

我有两个 linq 查询,查询两个不同的实体。一个实体包含所有仓库,另一个包含我不需要的仓库。

我使用这个查询来获取我不需要的所有仓库:

var sysproWarehouses = from i in sysproSession.Query<InvWarehouse>()
                            group i by i.Warehouse
                            into g
                            select new
                            {
                                g.Key 
                            };

这是我想要获取我需要的所有仓库的查询:

var stockEvaluation = from ib in mapicsSession.Query<ItemBalance>()
                                  where //I guess it needs to be done here
                                  orderby w.Description
                                  group ib by w.Description
                                  into g
                                  select new
                                  {
                                      Warehouse = g.Key,
                                  };

基本上我只需要从第二个查询中排除第一个查询结果。如果这是一个简单的问题,我深表歉意,但我是初学者,所以...谢谢!

【问题讨论】:

  • 看看Except 函数。它完全符合您的要求。
  • !sysproWarehouses.Any(你的测试在这里)或 cramopy 所说的
  • 您还可以在现有查询中添加where 子句,并在其中检查!sysproWarehouses.Contains() 函数。
  • 看起来你想对两组进行差异。看看EF提供的Except函数。以下链接包含一个足够好的解释:c-sharpcorner.com/UploadFile/87b416/…

标签: c# linq


【解决方案1】:

你可以这样做:

var sysproWarehouses = from i in sysproSession.Query<InvWarehouse>()
                            group i by i.Warehouse
                            into g
                            select new
                            {
                                g.Key 
                            };

var stockEvaluation = from ib in mapicsSession.Query<ItemBalance>()
                        orderby w.Description
                        group ib by w.Description
                        into g
                        select new
                        {
                            g.Key,
                        };

现在,从 stockEvaluation 列表中排除 sysproWarehouses 列表项:

var result = stockEvaluation.Except(sysproWarehouses);

注意:-结果包含排除项

【讨论】:

  • 此解决方案基于@cramopy 建议。
  • 我收到此错误 = 'string' does not contain a definition for and the best extension method overload requires a receiver of type。我是否缺少 using 指令或其他内容?看来我不能使用 except() 方法
  • 您需要为两个列表使用相同的类型。我已经编辑了 select 语句以仅返回 Key。我已经更新了我的答案。请看一下。谢谢!
  • @JudithJoubert,如果这种方法对你有用,你能投票赞成吗?谢谢
  • 只要我再得到 2 个代表。我是新来的。保证我会没事的!
【解决方案2】:

我想您需要一个Except,但调用Select 之后,因为您的两个列表来自不同的表。像这样的:

var stockEvaluation = (from ib in mapicsSession.Query<ItemBalance>()
                      orderby w.Description
                      group ib by w.Description
                      into g
                      select new
                      {
                          g.Key,
                      }).Except(sysproWarehouses);

请注意,我还更改了您的匿名类型中的唯一成员,以匹配您第一次查询中的类型。

【讨论】:

  • 除了被翻译成SQL吗?
  • 我收到以下错误@HimBromBeere:'string' does not contain a definition for and the best extension method overload requires a receiver of type
【解决方案3】:

【讨论】:

  • 没有展示如何使用它,你的答案 - 如果有的话 - 不是很有帮助。
猜你喜欢
  • 1970-01-01
  • 2014-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-11
  • 1970-01-01
  • 1970-01-01
  • 2014-08-18
相关资源
最近更新 更多