gpt4 book ai didi

c# - 选择 2 表的 2 列

转载 作者:太空宇宙 更新时间:2023-11-03 22:46:35 25 4
gpt4 key购买 nike

我有 2 个表:

  • 工作人员:(ID,姓名)
  • 薪水:(ID,VALUE)

我的问题是:

  1. 我如何在 Controller 中写入查询语法和方法语法并返回到 View(),就像在 SQL 查询中这样:

     select a.NAME, b.VALUE 
    from Staff a, Salary b
    where a.ID = b.ID
  2. 我如何在 View 中声明:

     @model IEnumerable<Project.Model.xxxx>

这是我在 IndexController 中处理一个表的方式:

LinQDataContext data = new LinQDataContext();

public ActionResult Index(int id)
{
var staffWithTheirSalary = data.Staff
.Select(a => a)
.Where(a => a.ID == id);
}

索引 View :

@model IEnumerable<Project.Model.Staff>

@foreach(var item in Model)
{
@item.Name
}

最佳答案

您可以将 View 模型设置为 IEnumerable<StaffSalaryViewModel>其中 StaffSalaryViewModel是:

public class StaffSalaryViewModel
{
public int StaffId { get; set; }
public string Name { get; set; }
public decimal Salary { get; set; } // Not sure of the type
}

然后提取列表:

使用 Linq 方法语法:

var result = data.Staff
.Join(data.Salary,
staff => staff.ID,
salary => salary.ID,
(staff, salary) => new StaffSalaryViewModel {
StaffId = staff.ID,
Name = staff.NAME,
Salary = salary.VALUE
});

使用 Linq 查询语法:

var result = from staff in data.Staff 
join salary in data.Salary on staff.ID equals salary.ID
select new StaffSalaryViewModel {
StaffId = staff.ID,
Name = staff.NAME,
Salary = salary.VALUE
};

更新

它看起来像 VALUE在你的字段 Salary表允许空值。如果是这样,只需使 View 模型中的相应属性可为空,就像这样(前提是它是 decimal 类型):

public class StaffSalaryViewModel
{
public int StaffId { get; set; }
public string Name { get; set; }
public decimal? Salary { get; set; } // Nullable/optional decimal
}

或者如果你想设置StaffSalaryViewModel.Salary到 0 如果 VALUE为空,将您的查询更改为:

 Salary = salary.VALUE ?? 0

关于c# - 选择 2 表的 2 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49568732/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com