簡體   English   中英

選擇2列2表

[英]Select 2 Column of 2 Table

我有2張桌子:

員工 :( 身份證 ,姓名)

薪水 :( ID ,VALUE)

我的問題是:

  1. 如何在Controller中的“ 查詢語法 ”和“ 方法語法 ”中編寫並返回到View(),如SQL Query中所示:

    select a.NAME, b.VALUE from Staff a, Salary b where a.ID = b.ID

  2. 我怎么能在視圖中聲明如下:

    @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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM