如何使用相关值作为 select 列表 DataTextField 来自使用 Dapper 构建的模型
How to use related value as select list DataTextField from model built with Dapper
我希望使用 2 个相关表中的值填充 select 列表,但如果将相关值用作 DataTextField,我会得到一个空引用。
分支模型
public class BranchModel
{
public int ContractorCode { get; set; }
public int BranchNumber { get; set; }
public string BranchName { get; set; }
-- Excluded for brevity
}
分支分配模型
public class BranchAssignmentModel
{
public int Id { get; set; }
public int Colleague { get; set; }
public int Branch { get; set; }
public DateTime Created { get; set; }
public bool Active { get; set; }
public DateTime LastModified { get; set; }
public ColleagueModel? Col { get; set; }
public BranchModel? Bra { get; set; }
}
结果存储在List中(colleagueId是前面设置的变量)
Assignments = new List<BranchAssignmentModel>();
var basql = $@"SELECT ba.Colleague, ba.Branch, ba.Active, b.ContractorCode, b.BranchName
FROM HR.BranchAssignment ba
JOIN HR.Branch b ON ba.Branch = b.ContractorCode
WHERE ba.Active = 1 AND ba.Colleague = {colleagueId}";
using (var connection = new SqlConnection(_configuration.GetConnectionString("Default")))
{
var assignments = await connection.QueryAsync<BranchAssignmentModel, BranchModel, BranchAssignmentModel>(basql, (assignment,branch) =>
{
assignment.Bra = branch;
return assignment;
}, splitOn: "ContractorCode");
foreach (var assignment in assignments)
{
Assignments.Add(assignment);
}
}
一次 运行 列表中填充了 5 个预期结果。当我使用以下内容创建 select 列表时,我得到一个 Null Reference Exception。
SelectBranches = new SelectList(Assignments,
nameof(BranchAssignmentModel.Branch), nameof(BranchAssignmentModel.Bra.BranchName));
有图有关系
如果我不使用相关字段,Select 列表显示正常,即也只使用 Branch 作为 DataTextField
SelectBranches = new SelectList(Assignments,
nameof(BranchAssignmentModel.Branch), nameof(BranchAssignmentModel.Branch));
如果您使用 nameof(BranchAssignmentModel.Bra.BranchName)
,则 DataTextField
为 BranchName
。
您需要如下所示的具体名称:
SelectBranches = new SelectList(Assignments,
nameof(BranchAssignmentModel.Branch), "Bra.BranchName");
我希望使用 2 个相关表中的值填充 select 列表,但如果将相关值用作 DataTextField,我会得到一个空引用。
分支模型
public class BranchModel
{
public int ContractorCode { get; set; }
public int BranchNumber { get; set; }
public string BranchName { get; set; }
-- Excluded for brevity
}
分支分配模型
public class BranchAssignmentModel
{
public int Id { get; set; }
public int Colleague { get; set; }
public int Branch { get; set; }
public DateTime Created { get; set; }
public bool Active { get; set; }
public DateTime LastModified { get; set; }
public ColleagueModel? Col { get; set; }
public BranchModel? Bra { get; set; }
}
结果存储在List中(colleagueId是前面设置的变量)
Assignments = new List<BranchAssignmentModel>();
var basql = $@"SELECT ba.Colleague, ba.Branch, ba.Active, b.ContractorCode, b.BranchName
FROM HR.BranchAssignment ba
JOIN HR.Branch b ON ba.Branch = b.ContractorCode
WHERE ba.Active = 1 AND ba.Colleague = {colleagueId}";
using (var connection = new SqlConnection(_configuration.GetConnectionString("Default")))
{
var assignments = await connection.QueryAsync<BranchAssignmentModel, BranchModel, BranchAssignmentModel>(basql, (assignment,branch) =>
{
assignment.Bra = branch;
return assignment;
}, splitOn: "ContractorCode");
foreach (var assignment in assignments)
{
Assignments.Add(assignment);
}
}
一次 运行 列表中填充了 5 个预期结果。当我使用以下内容创建 select 列表时,我得到一个 Null Reference Exception。
SelectBranches = new SelectList(Assignments,
nameof(BranchAssignmentModel.Branch), nameof(BranchAssignmentModel.Bra.BranchName));
有图有关系
如果我不使用相关字段,Select 列表显示正常,即也只使用 Branch 作为 DataTextField
SelectBranches = new SelectList(Assignments,
nameof(BranchAssignmentModel.Branch), nameof(BranchAssignmentModel.Branch));
如果您使用 nameof(BranchAssignmentModel.Bra.BranchName)
,则 DataTextField
为 BranchName
。
您需要如下所示的具体名称:
SelectBranches = new SelectList(Assignments,
nameof(BranchAssignmentModel.Branch), "Bra.BranchName");