首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查询产品中的独占使用实体

查询产品中的独占使用实体
EN

Stack Overflow用户
提问于 2019-09-23 11:30:29
回答 1查看 51关注 0票数 3

我加入了三个列表:Products、AcceptedOffers和Deliverys。

代码语言:javascript
复制
List<Product> products = new List<Product>() {
    new Product(){ Id = 1, Name = "Drink" }
};

List<AcceptedOffer> accepted = new List<AcceptedOffer>() {
    new AcceptedOffer(){ Id = 10, ProductId = 1  },
    new AcceptedOffer(){ Id = 11, ProductId = 1  }
};

List<Delivery> deliveries = new List<Delivery>() {
    new Delivery(){ Id = 101, ProductId = 1, Status = "Success" },
    new Delivery(){ Id = 102, ProductId = 1, Status = "Failure"}
};

我希望将交付与已接受的报价联系起来,但我无法找到一种方法来查询每个AcceptedOffer/交付的独家用途:

代码语言:javascript
复制
var test = from d in deliveries
           join p in products on d.ProductId equals p.Id
           join ao in accepted on p.Id equals ao.ProductId
           select new { d, p, ao };

这意味着:

代码语言:javascript
复制
Drink | 10 | Success
Drink | 11 | Success
Drink | 10 | Failure
Drink | 11 | Failure

如果我按接受的报价分组,那么FirstOrDefault()两次交付都成功;按交付分组,第一个AcceptedOffer相同。

我需要:

代码语言:javascript
复制
Drink | 10 | Success
Drink | 11 | Failure

什么是数学/查询巫毒,使我独家使用每一方?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-23 11:52:14

从技术上讲,您可以尝试Linq SelectManyZip来实现压缩(即加入Nth报价和Nth交付):

代码语言:javascript
复制
Accepted Offer            ->  Delivery
----------------------------------------------------------------------------
{ Id = 10, ProductId = 1} -> { Id = 101, ProductId = 1, Status = "Success" } 
{ Id = 11, ProductId = 1} -> { Id = 102, ProductId = 1, Status = "Failure" }
 ...
 N-th offer               -> N-th delivery

代码:

代码语言:javascript
复制
   var result = products // for each product                              
     .SelectMany(prod => deliveries             
         // we get corresponding deliveries
        .Where(del => del.ProductId = prod.Id)  
         // which we mechanically zip with filtered accepted offeres
        .Zip(accepted.Where(acc => acc.ProductId = prod.Id), 
           (del, acc) => new {
             d  = del.Status,
             p  = prod.Id,   
             ao = acc.Id,
         }));
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58061508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档