【发布时间】:2021-03-11 01:36:44
【问题描述】:
我正在尝试对 rust 中的两个向量执行内部连接,但不知道如何实现。
简而言之,我正在寻找具有部门名称的员工。
如果有人在这里熟悉 C# LINQ,那么我正在尝试在 rust 中实现类似下面的内容。
考虑与下面在 model.rs 中指定的相同模型
from e in employees
join d in department
on e.dept_id equals d.dept_id
select new
{
DeptName= d.dept_name,
Name = e.name
};
这是我的 rust 语言代码:
models.rs
use bigdecimal::BigDecimal;
use chrono::{NaiveDateTime, Utc};
pub struct Department {
pub dept_id: i32,
pub dept_name: Option<String>,
pub created_on: Option<NaiveDateTime>,
pub created_by: Option<String>,
pub modified_on: Option<NaiveDateTime>,
pub modified_by: Option<String>,
pub is_active: Option<bool>,
}
impl Department {
pub fn get_departments() -> Vec<Department> {
vec![
Department {
dept_id: 101,
dept_name: Option::from("Software".to_string()),
created_on: Option::from(Utc::now().naive_utc()),
created_by: Option::from("Jadon".to_string()),
modified_on: None,
modified_by: None,
is_active: Option::from(true),
},
Department {
dept_id: 102,
dept_name: Option::from("Hr".to_string()),
created_on: Option::from(Utc::now().naive_utc()),
created_by: Option::from("Jadon".to_string()),
modified_on: None,
modified_by: None,
is_active: Option::from(true),
},
Department {
dept_id: 103,
dept_name: Option::from("Hr".to_string()),
created_on: Option::from(Utc::now().naive_utc()),
created_by: Option::from("Jadon".to_string()),
modified_on: None,
modified_by: None,
is_active: Option::from(true),
},
]
}
}
pub struct Employee {
pub employee_id: i32,
pub name: Option<String>,
pub age: Option<i32>,
pub address: Option<String>,
pub email: Option<String>,
pub dept_id: i32,
pub salary: Option<BigDecimal>,
pub created_on: Option<NaiveDateTime>,
pub created_by: Option<String>,
pub modified_on: Option<NaiveDateTime>,
pub modified_by: Option<String>,
pub is_active: Option<bool>,
}
impl Employee {
pub fn get_employees() -> Vec<Employee> {
vec![
Employee {
employee_id: 1001,
name: Option::from("Marten Babel".to_string()),
age: Option::from(25),
address: Option::from("Netherland".to_string()),
email: Option::from("somemail@gmail.com".to_string()),
dept_id: 101,
salary: Option::from(BigDecimal::from(50000.00)),
created_on: Option::from(Utc::now().naive_utc()),
created_by: Option::from("Tom".to_string()),
modified_on: None,
modified_by: None,
is_active: Option::from(true),
},
Employee {
employee_id: 1002,
name: Option::from("Jack Sancho".to_string()),
age: Option::from(22),
address: Option::from("England".to_string()),
email: Option::from("jacksemail@gmail.com".to_string()),
dept_id: 102,
salary: Option::from(BigDecimal::from(80000.00)),
created_on: Option::from(Utc::now().naive_utc()),
created_by: Option::from("Tom".to_string()),
modified_on: None,
modified_by: None,
is_active: Option::from(true),
},
Employee {
employee_id: 1003,
name: Option::from("Phil Foden".to_string()),
age: Option::from(29),
address: Option::from("England".to_string()),
email: Option::from("philsemail@gmail.com".to_string()),
dept_id: 101,
salary: Option::from(BigDecimal::from(80000.00)),
created_on: Option::from(Utc::now().naive_utc()),
created_by: Option::from("Tom".to_string()),
modified_on: None,
modified_by: None,
is_active: Option::from(true),
},
]
}
}
main.rs
fn main() {
let department: Vec<Department> = Department::get_departments();
for dept in department {
println!(
"Dept Id: {} and Dept Name: {}",
dept.dept_id,
dept.dept_name.unwrap_or_default()
);
}
let employee: Vec<Employee> = Employee::get_employees();
for emp in employee {
println!(
"Name is: {} and age is : {}",
emp.name.unwrap_or_default(),
emp.age.unwrap_or_default()
)
}
}
这里的“dept_id”将充当外键。
main.rs 中的代码运行良好。我正在获取部门和员工,但我如何才能在这两个向量上执行连接。
注意:到目前为止,我还没有使用柴油机。只希望在这些向量上执行连接。
有可能生锈吗?
谢谢
【问题讨论】:
-
您希望新向量中的项目类型是什么?
(Option<String>, Option<String>)?
标签: linq rust traits rust-cargo rust-diesel