我在WebApi控制器中有以下行;
string Codes = i.Products.FirstOrDefault().Code
如该行所述,它从第一个产品中获取代码。
但是,我真正希望它做的是获取所有唯一代码,并将它们作为逗号分隔的字符串返回。
所以,我们说有6个相关产品,它们有以下代码:
现在,鉴于上述数据,该声明只返回" 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);
答案 0 :(得分:0)
我认为Distinct
和String.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)
};