在我们 API 响应中合并两个结果集
Combine two result sets in we API response
我正在使用 .Net core 3.1
并正在寻找一种组合两个结果集的方法-
我有一个结果集 returns 以下字段-
{
"studentId": 1001,
"studentName": "John Smot",
"studentGrade": 5
},
{
"studentId": 1002,
"studentName": "Amy Johnson",
"studentGrade": 4
}
我还有一个结果集,其中 returns 学生类别信息-
{
"categoryId": 1000,
"categoryName": "EVS",
"studentId": 1001
},
{
"categoryId": 1000,
"categoryName": "EVS",
"studentId": 1002
}
简而言之,类别结果集returns student Id 以及其下的。所以这里两个学生都属于类别1000.
我想将第一个结果与第二个结果合并,这样它将 return 类别与学生信息一起-
{
"studentId": 1001,
"studentName": "John Smot",
"studentGrade": 5,
"categoryId": 1000
},
{
"studentId": 1002,
"studentName": "Amy Johnson",
"studentGrade": 4,
"categoryId": 1000
}
两个结果都来自不同的来源,我不确定是否有直接的方法可以做到这一点。有人可以建议实现此目标的最快方法吗?
根据你的代码和描述,结果集好像是一个json字符串吧?如果是这样的话,得到结果集后,首先可以根据结果创建模型,使用JsonSerializer.Deserialize()
方法将JSON字符串转为Object,然后,可以得到使用 LINQ 查询语句的结果。
参考以下示例:
型号:
public class StudentInfo
{
public int studentId { get; set; }
public string stuendtName { get; set; }
public int studentGrade { get; set; }
}
public class CategoryInfo
{
public int categoryId { get; set; }
public string categoryName { get; set; }
public int studentId { get; set; }
}
public class StudentCategoryViewModel
{
public int studentId { get; set; }
public string stuendtName { get; set; }
public int studentGrade { get; set; }
public int categoryId { get; set; }
}
并且:
//required using System.Text.Json;
var studentjsonstr = "[{\"studentId\":1001,\"stuendtName\":\"John Smot\",\"studentGrade\":5},{\"studentId\":1002,\"stuendtName\":\"Amy Johnson\",\"studentGrade\":4}]";
var categoryjsonstr = "[{\"categoryId\":1000,\"categoryName\":\"EVS\",\"studentId\":1001},{\"categoryId\":1000,\"categoryName\":\"EVS\",\"studentId\":1002}]";
var studentlist = JsonSerializer.Deserialize<List<StudentInfo>>(studentjsonstr);
var categorylist = JsonSerializer.Deserialize<List<CategoryInfo>>(categoryjsonstr);
var result = studentlist.Select(c => new StudentCategoryViewModel()
{
studentId = c.studentId,
stuendtName = c.stuendtName,
studentGrade = c.studentGrade,
categoryId = categorylist.Where(d => d.studentId == c.studentId).FirstOrDefault().categoryId
}).ToList();
截图是这样的,然后,你可以return把结果给客户端。
我正在使用 .Net core 3.1
并正在寻找一种组合两个结果集的方法-
我有一个结果集 returns 以下字段-
{
"studentId": 1001,
"studentName": "John Smot",
"studentGrade": 5
},
{
"studentId": 1002,
"studentName": "Amy Johnson",
"studentGrade": 4
}
我还有一个结果集,其中 returns 学生类别信息-
{
"categoryId": 1000,
"categoryName": "EVS",
"studentId": 1001
},
{
"categoryId": 1000,
"categoryName": "EVS",
"studentId": 1002
}
简而言之,类别结果集returns student Id 以及其下的。所以这里两个学生都属于类别1000.
我想将第一个结果与第二个结果合并,这样它将 return 类别与学生信息一起-
{
"studentId": 1001,
"studentName": "John Smot",
"studentGrade": 5,
"categoryId": 1000
},
{
"studentId": 1002,
"studentName": "Amy Johnson",
"studentGrade": 4,
"categoryId": 1000
}
两个结果都来自不同的来源,我不确定是否有直接的方法可以做到这一点。有人可以建议实现此目标的最快方法吗?
根据你的代码和描述,结果集好像是一个json字符串吧?如果是这样的话,得到结果集后,首先可以根据结果创建模型,使用JsonSerializer.Deserialize()
方法将JSON字符串转为Object,然后,可以得到使用 LINQ 查询语句的结果。
参考以下示例:
型号:
public class StudentInfo
{
public int studentId { get; set; }
public string stuendtName { get; set; }
public int studentGrade { get; set; }
}
public class CategoryInfo
{
public int categoryId { get; set; }
public string categoryName { get; set; }
public int studentId { get; set; }
}
public class StudentCategoryViewModel
{
public int studentId { get; set; }
public string stuendtName { get; set; }
public int studentGrade { get; set; }
public int categoryId { get; set; }
}
并且:
//required using System.Text.Json;
var studentjsonstr = "[{\"studentId\":1001,\"stuendtName\":\"John Smot\",\"studentGrade\":5},{\"studentId\":1002,\"stuendtName\":\"Amy Johnson\",\"studentGrade\":4}]";
var categoryjsonstr = "[{\"categoryId\":1000,\"categoryName\":\"EVS\",\"studentId\":1001},{\"categoryId\":1000,\"categoryName\":\"EVS\",\"studentId\":1002}]";
var studentlist = JsonSerializer.Deserialize<List<StudentInfo>>(studentjsonstr);
var categorylist = JsonSerializer.Deserialize<List<CategoryInfo>>(categoryjsonstr);
var result = studentlist.Select(c => new StudentCategoryViewModel()
{
studentId = c.studentId,
stuendtName = c.stuendtName,
studentGrade = c.studentGrade,
categoryId = categorylist.Where(d => d.studentId == c.studentId).FirstOrDefault().categoryId
}).ToList();
截图是这样的,然后,你可以return把结果给客户端。