我有两张桌子:
员工 :( ID ,NAME)
薪水 :( 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
}
答案 0 :(得分:1)
由于正在加入表格,我更喜欢使用SELECT ID, x.A
FROM mytable
CROSS APPLY (
SELECT TOP 1 t.A
FROM (VALUES (A1), (A2), (A3), (A4)) AS t(A)
GROUP BY t.A
ORDER BY COUNT(*) DESC) AS x
。控制器将使用LinQDataContext来获取数据,但在创建C#对象时,我建议创建一个仅用于显示数据的类(在示例中称为query syntax
)。
MySalaryModel
答案 1 :(得分:1)
使用ViewModel, 您可以在项目中创建Viewmodel文件夹,并像这样创建类。
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
}
答案 2 :(得分:1)
您可以将视图模型设为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
字段允许空值。如果是这样,只需使视图模型中的相应属性可以为空,如此(假设它是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