仅在Webapi控制器中返回唯一值

时间:2016-03-16 13:50:38

标签: entity-framework linq asp.net-web-api2

我在WebApi控制器中有以下行;

string Codes = i.Products.FirstOrDefault().Code

如该行所述,它从第一个产品中获取代码。

但是,我真正希望它做的是获取所有唯一代码,并将它们作为逗号分隔的字符串返回。

所以,我们说有6个相关产品,它们有以下代码:

  • 45
  • 54
  • 45
  • 120
  • 54
  • 45

现在,鉴于上述数据,该声明只返回" 45"

但我希望上面的陈述能够回归" 45,54,120和#34; (作为一个字符串)。

我该怎么做?

完整代码:

public System.Data.Entity.DbSet<WebAPI.Models.Product> Products { get; set; }
private ApplicationDbContext db = new ApplicationDbContext();

var product = await db.Products.Select(i =>
                new ProductDTO()
                {
                    Id = i.Id,
                    Created = i.Created,
                    Title = i.Title,                    
                    Codes = i.Products.FirstOrDefault().Code

                }).SingleOrDefaultAsync(i => i.Id == id);

2 个答案:

答案 0 :(得分:0)

我认为DistinctString.Join适合你。请试试这个:

var product = await db.Products.AsEnumerable()//Turn AsEnumarable
.Select(i =>
   new ProductDTO()
   {
     Id = i.Id,
     Created = i.Created,
     Title = i.Title,                    
     Codes = string.Join(",", 
               i.Products.Select(l => l.Code).Distinct())
   }).SingleOrDefaultAsync(i => i.Id == id);

答案 1 :(得分:0)

转换为以逗号分隔的列表:

IEnumerable<string> distinctCodes = i.Products.Select(product => product.Code).Distinct();

return string.Join(",", distinctCodes);

但是如果你的控制器返回一个字符串集合而不是串联字符串,那可能会更好。

在OP代码更新后编辑:

var DBProduct = await db.Products.SingleOrDefaultAsync(i => i.Id == id);

IEnumerable<string> productCodes = DBProduct.Products.Select(p => p.Code).Distinct();

var product = new ProductDTO()
{
   Id = DBProduct.Id,
   Created = DBProduct.Created,
   Title = DBProduct.Title,                    
   Codes = string.Join(",", productCodes)
};