[英]Select 2 Column of 2 Table
我有2張桌子:
員工 :( 身份證 ,姓名)
薪水 :( ID ,VALUE)
我的問題是:
如何在Controller中的“ 查詢語法 ”和“ 方法語法 ”中編寫並返回到View(),如SQL Query中所示:
select a.NAME, b.VALUE from Staff a, Salary b where a.ID = b.ID
我怎么能在視圖中聲明如下:
@model IEnumberable<Project.Model.xxxx>
這是我用1個表做的方式
[ Controller:IndexController ]
LinQDataContext data = new LinQDataContext();
public ActionResult Index(int id)
{
var staffWithTheirSalary = data.Staff.Select(a => a).Where(a => a.ID == id);
}
[ 查看:索引 ]
@model IEnumerable<Project.Model.Staff>
@foreach(var item in Model)
{
@item.Name
}
因為正在連接表,所以我更喜歡使用query syntax
。 控制器將使用LinQDataContext來獲取數據,但是在創建C#對象時,我建議創建一個僅用於顯示數據的類(在示例中稱為MySalaryModel
)。
public ActionResult Index(int id)
{
IEnumerable<Project.Model.MySalaryModel> staffWithTheirSalary = from staff in data.Staff
join salary in data.Salary on staff.Id equals salary.Id
select new Project.Model.MySalaryModel
{
Id = staff.Id,
Name = staff.Name,
Salary = salary.Value,
};
return View(staffWithTheirSalary);
}
使用ViewModel,您可以在項目中創建Viewmodel文件夾,並將Create類創建為這樣。
public class StaffSalaryViewModel
{
public int StaffId { get; set; }
public int SalaryeId { get; set; }
public string StaffName { get; set; }
public string SlaaryName { get; set; }
}
在行動:
public ActionResult Index(int id)
{
StaffSalaryViewModel staffWithTheirSalary = (from itemStaff in data.Staff join itemSalary in data.Salary in itemStaff.id equal itemSalary.id where itemSalary.id=id select new StaffSalaryViewModel {Salaryname=itemSalary.Name,StaffName=itemStaff.Name,SalaryId=itemSalary.Id,itemStaff.Id}).ToList();
}
在視圖中
@model IEnumerable<Project.ViewModel.StaffSalaryViewModel>
@foreach(var item in Model)
{
@item.SalaryName
}
您可以將視圖模型設置為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
};
UPDATE
看起來您的Salary
表中的VALUE
字段允許空值。 如果是這樣,只需使視圖模型中的相應屬性可以為空,如此(假設它是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
為null,請將查詢更改為:
Salary = salary.VALUE ?? 0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.