Query 8. Export Users and Products от JSON Processing
Някой може ли да ми даде насока как да подхвана гореспоменатата задача, защото не мога да измисля начин с LinQ как да Select-на броя на юзерите и продуктите от същата колекция?
Някой може ли да ми даде насока как да подхвана гореспоменатата задача, защото не мога да измисля начин с LinQ как да Select-на броя на юзерите и продуктите от същата колекция?
using Microsoft.EntityFrameworkCore;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
using ProductShop.Data;
using System;
using System.Linq;
namespace ProductShop
{
public class StartUp
{
public static void Main(string[] args)
{
string json = string.Empty;
var context = new ProductShopContext();
Console.WriteLine(GetUsersWithProducts
(context));
}
public static string GetUsersWithProducts(ProductShopContext context)
{
DefaultContractResolver contractResolver = new DefaultContractResolver
{
NamingStrategy = new CamelCaseNamingStrategy()
};
var users = context.Users
.Where(u => u.ProductsSold.Any(ps => ps.BuyerId != null))
.Include(u => u.ProductsSold)
.Select(u => new
{
u.FirstName,
u.LastName,
u.Age,
soldProducts = new
{
count = u.ProductsSold
.Where(p => p.BuyerId != null)
.Count(),
products = u.ProductsSold
.Where(p => p.BuyerId != null)
.Select(p => new
{
p.Name,
p.Price
})
.ToList()
}
})
.OrderByDescending(u => u.soldProducts.count)
.ToList();
var withUserCount = new
{
usersCount = users.Count,
users,
};
var json = JsonConvert.SerializeObject(withUserCount, new JsonSerializerSettings
{
ContractResolver = contractResolver,
Formatting = Formatting.Indented,
NullValueHandling = NullValueHandling.Ignore
});
return json;
}
}
}
Реших я най-вероятно не по най-добрия начин, но мина в джъдж. Ще се радвам, ако някой сподели негово решение на задачата.
Link ето линк към моето репо. Решил съм я със 4 DTO модела и Automapper вместо с анонимни обекти. Можеш да разгледаш Exports/UsersAndProductsDtos.cs и маппер профила за конфигурацията. Решението ти е правилно, не виждам проблем.
An article that is remarkable and should be learned. Thank you for providing this great information. us map