c# - 比匿名类型的通用列表更好的方法

标签 c# linq sqlite

所以我有一个带有 [Raw_Data][Names] 表的 sqlite 数据库。 Raw_Data 有 3 个字段,用于保存对 Names 表(请求者、工作人员和批准者)的引用(外键?)。 当我显示数据时(dgvResults 是 Windows 窗体应用程序中的 DataGridView),我想将名称合并到主表 (Raw_Data) 中。

我正在使用 sqlite-net(由 Guitub 上的 praeclarum 提供)并具有以下代码(为简洁起见,仅显示相关部分):

...
using (var db=new SQLiteConnection(DB_Interop_SQLite.DB_Path, true))
{
    this.Users=db.Table<User>().ToList<User>();
    this.Records=db.Table<Raw_Data>().ToList<Raw_Data>();
    this.Roles=db.Table<Role>().ToList<Role>();
}

var items=
(
    from r in this.Records
    join requester in this.Users on r.Requester equals requester.ID into group1
    from requester in group1.DefaultIfEmpty()
    join worker in this.Users on r.Drafter equals worker.ID into group2
    from worker in group2.DefaultIfEmpty()
    join approver in this.Users on r.Approver equals approver.ID into group3
    from approver in group3.DefaultIfEmpty()
    select new {
        r.ID, r.Project, Requester=requester, r.Task_Code,
        r.DT_submitted, r.DT_required, // other fields
        Worker=worker, r.DT_completed, // other related fields
        Approver=approver, r.DT_approved, // more fields
    }
).ToList();

this.dgvResults.DataSource=items;
...

我已阅读LINQ Join 2 List<T>sCreate Items from 3 collections using LinqMerge multiple Lists into one List with LINQ

他们提供了很大的帮助。

我还提到了A generic list of anonymous class ,这确实帮助我创建了 linq 查询,而且一切都运行得很好。 在我的代码中,User 类覆盖了 ToString() 方法,因此它按照我的需要显示全名。

假设我想要一个包含 Raw_Data 中的字段的列表,但我想要 User 对象作为字段,而不是引用 Names 中的 ID 的整数字段,它将保存 ID 以及用户的其余部分信息(姓名、电子邮件、电话等),就像我在 select 语句中的匿名类型一样。

所以我的问题是:是否有更好的方法来实现列表(不是匿名类型),而无需重写整个 Raw_Data 类,只是为了拥有一个“用户”字段(来自名称表)而不仅仅是用户 ID?

理想情况下,我想要与我的代码完全相同的行为,但最好没有匿名类型。

谢谢。

最佳答案

不确定这是否是您正在寻找的内容,但您可以指定一个类来保存该数据,然后选择该类而不是匿名类型:

public class RawDataInfo
{
    public int ID { get; set; }
    public string Requester { get; set; }
    ...
}

然后更改您选择的 RawDataInfo()

 select new RawDataInfo(){
    ID = r.ID, 
    Requester = requester, 
    ...
}

关于c# - 比匿名类型的通用列表更好的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20979534/

相关文章:

c# - 激活时 MDI 窗口 z 顺序异常

c# - NDepend 能否将所有方法中的代码输出到特定方法的依赖树中?

sql - 简单的 Linq 问题 : How to select more than one column?

c# - 在 linq 语句中输出变量

sqlite - 如何通过 UNION 重用表?

c# - 使用 nunit 重新加载 app.config

c# - 将多个字段绑定(bind)到 ASP.NET 中的列表框

database - TClientDataset 中的多个表?

sqlite - 如何使用 SQLite 批量插入?

c# - ICollection<T> 使用 LINQ 计算每小时平均值