c# - 在我的 C# Windows 窗体中从 Linq 查询创建数据表
问题描述
从 Linq 查询创建 DataTable 我使用 Ling 在 dataGridview 上显示我的数据,并且我有 linq 搜索功能来搜索人员。它工作正常,但不像 Datatable 那样。我必须在我的 serch 函数给我取名之前写下洞名。我想从 Linq 查询创建一个数据表,但我不知道该怎么做。这是我的代码:
public void SerachdataEmp(string name)
{
db = new EmployeeEntity();
var result = (from u in db.Employee
join d in db.Department on u.DepartmentId equals d.DepartmentId
where u.FirstName == name
select new
{
FirstName = u.FirstName,
LastName = u.LastNameName,
DepartmentName = d.DepartmentName
}
}).Tolist();
dataGridView1.DataSource = result;
我试过这样
(from u in db.Employee.AsEnumerable()
join d in db.Department.AsEnumerable() on u.DepartmentId equals d.DepartmentId
where u.FirstName == searchEmployee
but then I don't know how to do. Thank you in advance!
解决方案
我不推荐这样做,而且我不相信您的搜索问题与不使用 aDataTable
相关,但使用这些扩展名,您可以将查询答案转换为DataTable
-ToDataTable()
代替ToList()
.
public static class ExtensionMethods {
// ***
// *** IEnumerable<> Extensions
// ***
public static DataTable ToDataTable<T>(this IEnumerable<T> rows) {
var dt = new DataTable();
if (rows.Any()) {
var rowType = typeof(T);
var memberInfos = rowType.GetPropertiesOrFields();
foreach (var info in memberInfos)
dt.Columns.Add(new DataColumn(info.Name, info.GetMemberType()));
foreach (var r in rows)
dt.Rows.Add(memberInfos.Select(i => i.GetValue(r)).ToArray());
}
return dt;
}
// ***
// *** MemberInfo Extensions
// ***
public static Type GetMemberType(this MemberInfo member) {
switch (member) {
case FieldInfo mfi:
return mfi.FieldType;
case PropertyInfo mpi:
return mpi.PropertyType;
case EventInfo mei:
return mei.EventHandlerType;
default:
throw new ArgumentException("MemberInfo must be if type FieldInfo, PropertyInfo or EventInfo", nameof(member));
}
}
public static object GetValue(this MemberInfo member, object srcObject) {
switch (member) {
case FieldInfo mfi:
return mfi.GetValue(srcObject);
case PropertyInfo mpi:
return mpi.GetValue(srcObject);
default:
throw new ArgumentException("MemberInfo must be of type FieldInfo or PropertyInfo", nameof(member));
}
}
// ***
// *** Type Extensions
// ***
public static List<MemberInfo> GetPropertiesOrFields(this Type t, BindingFlags bf = BindingFlags.Public | BindingFlags.Instance) =>
t.GetMembers(bf).Where(mi => mi.MemberType == MemberTypes.Field | mi.MemberType == MemberTypes.Property).ToList();
}
推荐阅读
- c# - Ef 返回 null,但实体存在
- python-3.x - 使用 Matplotlib 的 Twinx 绘图时缺少条形图
- python - 关于 Jupyterlab 中的 Python '退格'\b
- reactjs - 在某些函数**名称**上禁用 max-lines-per-function
- powershell - 获取完整目录结构的递归计数
- twitter-bootstrap - Bootstrap 4 - 带有下拉菜单的两个按钮 - 第二个按钮显示第一个按钮的内容
- google-apps-script - 无法将我的 Google 脚本切换到“在 Apps 脚本管理的文件夹中”的新 Cloud Platform 项目
- git - Git 会自动覆盖冲突
- php - Laravel 5.7 中的 LaravelRedis::connection() 和 Redis::connection() 有什么区别?
- sql - 如何在列中找到最接近的数字?