如何使用相关值作为 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),则 DataTextFieldBranchName

您需要如下所示的具体名称:

SelectBranches = new SelectList(Assignments,
                nameof(BranchAssignmentModel.Branch), "Bra.BranchName");