如何显示10个类别如下的食谱:
{"CategoryName":"CategoryName1",
.
.
.
10 recipe item
},
{"CategoryName":"CategoryName2",
10 recipe item
}
我的代码:
---------------------------------------------------------------
var infoQuery = (from r in db.tbRecipe
join s in db.tbCategory
on r.CategoryID equals s.ID
group new { r, s } by new { r.ID,r.CaloryValue,r.CategoryID,r.CoockTime,r.ImageList,r.Name,r.VideoURL , s.CategoryName }
into grp
select new
{
grp.Key.CategoryName,
grp.Key.ID,
grp.Key.ImageList,
grp.Key.Name,
grp.Key.CaloryValue,
grp.Key.CoockTime,
}).Take(10);
return Json(infoQuery.ToList());
-----------------------------------------------------------
my result:
[
{
"CategoryName": "ایرانی",
"ID": 1,
"ImageList": null,
"Name": "باقالی پلو",
"CaloryValue": "200",
"CoockTime": 20
},
{
"CategoryName": "فوت وفن",
"ID": 2,
"ImageList": null,
"Name": "میگو",
"CaloryValue": "100",
"CoockTime": 10
},
{
"CategoryName": "بین المللی",
"ID": 3,
"ImageList": null,
"Name": "باقالی پلو",
"CaloryValue": "200",
"CoockTime": 20
},
{
"CategoryName": "بین المللی",
"ID": 4,
"ImageList": null,
"Name": "میگو",
"CaloryValue": "100",
"CoockTime": 10
},
{
"CategoryName": "دریایی",
"ID": 5,
"ImageList": null,
"Name": "باقالی پلو",
"CaloryValue": "200",
"CoockTime": 20
},
{
"CategoryName": "دریایی",
"ID": 6,
"ImageList": null,
"Name": "میگو",
"CaloryValue": "100",
"CoockTime": 10
}
]
答案 0 :(得分:0)
我改进了您的查询,这应该可以解决问题。
function testMe() {
var ID = ''; // ID of your Document
var name = ''; // Name of your sheet
var sourceSheet = SpreadsheetApp.openById(ID); // Selects your Source Spreadsheet by its id
var ssheet = sourceSheet.getSheetByName(name); // Selects your Source Sheet by its name
var scoreRange = ssheet.getRange(2, 3, (sourceSheet.getLastRow() -1), (sourceSheet.getLastColumn() -2)); // Selects the range in which you will enter your scores
var dateRange = ssheet.getRange(2,2,(sourceSheet.getLastRow() -1)); // Selects the range for which player names in row 1
var playerRange = ssheet.getRange(1,3,1,(sourceSheet.getLastColumn() -2)); // selects the range for which dates were entered in column
var topScorerRange = ssheet.getRange(2,1,scoreRange.getNumColumns()); // selects the range where your topscorer output will end up
var numberOfPlayers = playerRange.getNumColumns(); // Gets the number of players you've already entered in row 1
var numberOfGames = playerRange.getNumRows(); // Gets the number of games whose dates you've already entered in Column B
function sortAndUpdateTopScorers() {
var array = scoreRange.getValues();
var totalPlayers = scoreRange.getNumColumns();
var totalGames = scoreRange.getNumRows();
var playerScores = [];
// iterate through the scoreRange and count up each players total score
for (var i = 0; i < totalPlayers; i++) {
var currentPlayer = 0;
for (var j = 0; j < totalGames; j++) {
currentPlayer += array[j][i];
}
playerScores.push([currentPlayer]);
}
// Combine the names of the players and their total score in order to create the strings for your topscorers column
for (var v = 0; v < numberOfPlayers; v++) {
playerScores[v].push(playerRange.getValues()[0][v] + ": " + playerScores[v]);
};
// Sort those strings according to their score
playerScores.sort(function(a,b) {
return b[0]-a[0]
});
// Remove the score value so only the string remains in the array
for (var x = 0; x < playerScores.length; x++) {
playerScores[x].shift();
}
// Write the content of the array into your topscorers column
topScorerRange.setValues(playerScores);
};
sortAndUpdateTopScorers();
};
答案 1 :(得分:0)
您可以得到如下结果:
var lstCategory = new List<Category> { new Category { Id=1}, new Category {Id=2 }, new Category { Id = 3 } };
var lstRecipe = new List<Recipe> { new Recipe { Id=1,Name="C1",CatId=1}, new Recipe { Id = 2, Name = "C2", CatId = 2 },
new Recipe { Id =3, Name = "C3", CatId = 2 },new Recipe { Id =3, Name = "C4", CatId = 3 },new Recipe { Id=1,Name="C5",CatId=1} };
var result = (from c in lstRecipe
join s in lstCategory
on c.CatId equals s.Id
group c by c.CatId
into g
let o = g.Take(10)
select o);
var lstItems = new List<DtoModel>();
foreach(var r in result)
{
var item = new DtoModel { Recipet = new List<RecipetDto>() };
item.CategoryName = r.First().CatId.ToString();
foreach(var s in r)
{
item.Recipet.Add(new RecipetDto
{
Id=s.Id,
Name=s.Name
});
}
lstItems.Add(item);
}
,然后按以下方式获取json数据:
string jsonResult = JsonConvert.SerializeObject(lstItems, Formatting.Indented,
new JsonSerializerSettings
{
ReferenceLoopHandling = ReferenceLoopHandling.Ignore
});
您的dto类:
class DtoModel
{
public string CategoryName { get; set; }
public List<RecipetDto> Recipet { get; set; }}