У меня проблемы с запросом объектов в моей базе данных. У меня есть asp.net Web API 2. По сути, запрос приходит к методу действия, и в соответствии с некоторыми данными запроса я пытаюсь запросить объекты и ответить обратно JSON.
Вот мои 2 сущности, которые я пытаюсь запросить:
! [GameBanks] http://i65.tinypic.com/1m7v6.png
! [GameCouponBanks] http://i65.tinypic.com/2wnsf15.png
В GameBanks может быть более одного кода продукта в соответствии с unitPrice. (5,10,15) У меня есть серийные номера и контакты в GameCouponBanks. Если я запрашиваю только 1 количество из GameBanks, то нет проблем Ответ JSON в порядке.
Вот пример запроса:
var gameBankResultVM = await (context.GameBanks.Where(g => g.productCode == "000000006446")
.Where(l => l.referenceId == initiate.referenceId)
.Take(1)
.Select(g => new
{
g.quantity,
g.version,
g.currency,
g.initiationResultCode,
g.productCode,
g.productDescription,
g.referenceId,
g.unitPrice,
g.totalPrice,
g.companyToken,
g.ApplicationCode,
g.estimateUnitPrice,
g.validatedToken,
coupons = g.coupons.Select(c => new
{
c.Pin,
c.Serial,
c.expiryDate
}).ToList()
})).ToListAsync();
И ответ JSON выглядит так, как я хочу.
{
"quantity": 1,
"version": "V1",
"currency": "TRY",
"initiationResultCode": "00",
"productCode": "000000006446",
"productDescription": "400 Riot Points - 400 RP",
"referenceId": "48900000492",
"unitPrice": 10,
"totalPrice": 10,
"companyToken": "",
"ApplicationCode": null,
"estimateUnitPrice": 0,
"validatedToken": null,
"coupons": [
{
"Pin": "abcde",
"Serial": "12345",
"expiryDate": null
},
{
"Pin": "jjjjj",
"Serial": "77777",
"expiryDate": null
}
]
}
Но если я запрашиваю более 1 количества продукта, мне нужно как-то сгруппировать их по GameBanks. Потому что ответ JSON выглядит так, чего я не хочу.
[
{
"quantity": 1,
"version": "V1",
"currency": "TRY",
"initiationResultCode": "00",
"productCode": "000000006446",
"productDescription": "400 Riot Points - 400 RP",
"referenceId": "48900000492",
"unitPrice": 10,
"totalPrice": 10,
"companyToken": "",
"ApplicationCode": null,
"estimateUnitPrice": 0,
"validatedToken": null,
"coupons": [
{
"Pin": "abcde",
"Serial": "12345",
"expiryDate": null
},
{
"Pin": "jjjjj",
"Serial": "77777",
"expiryDate": null
}
]
},
{
"quantity": 1,
"version": "V2",
"currency": "TRY",
"initiationResultCode": "00",
"productCode": "000000006446",
"productDescription": "500",
"referenceId": "48900000492",
"unitPrice": 15,
"totalPrice": 15,
"companyToken": null,
"ApplicationCode": null,
"estimateUnitPrice": 0,
"validatedToken": null,
"coupons": [
{
"Pin": "ABNDJK",
"Serial": "00000",
"expiryDate": null
}
]
}
]
Мне нужно сложить цены за единицу и вернуть JSON следующим образом. (Пожалуйста, проверьте количество = 2, unitPrice = 10, totalPrice = 20 и купоны)
{
"quantity": 2,
"version": "V1",
"currency": "TRY",
"initiationResultCode": "00",
"productCode": "000000006446",
"productDescription": "400 Riot Points - 400 RP",
"referenceId": "48900000492",
"unitPrice": 10,
"totalPrice": 20,
"companyToken": "",
"ApplicationCode": null,
"estimateUnitPrice": 0,
"validatedToken": null,
"coupons": [
{
"Pin": "abcde",
"Serial": "12345",
"expiryDate": null
},
{
"Pin": "jjjjj",
"Serial": "77777",
"expiryDate": null
},{
"Pin": "CENK",
"Serial": "131313",
"expiryDate": null
}
]
}
Как я могу достичь этого ответа выше?
Я могу сгруппироваться следующим образом, но не могу понять, как получить купоны.
(GameBanks.Where(g => g.ProductCode == "000000006446")
.Where(l => l.UnitPrice == 10)
.Take(2)
.GroupBy(c => new
{
c.Version,
c.Currency,
c.ProductCode,
c.UnitPrice,
c.ProductDescription,
c.İnitiationResultCode,
})
.Select(g => new
{
Version = g.Key.Version,
Currency = g.Key.Currency,
InitiationResultCode = g.Key.İnitiationResultCode,
ProductCode = g.Key.ProductCode,
ProductDescription = g.Key.ProductDescription,
TotalPrice = g.Sum(t => t.UnitPrice),
}))