如何加入 LiteDb

Meh*_*oob 1 c# linq c#-3.0 c#-4.0 litedb

我如何像 SQL 示例一样在 LiteDb 中的两个表之间加入:我有两个表 User 和 ActivityLog

这是模型

public class ActivityLog
{
    [BsonId]
    public int Id { get; set; }
    public string UserId { get; set; }
    public string Action { get; set; }
    public DateTime ActionDateTime { get; set; }
}


public class User
{
    [BsonId]
    public int Id { get; set; }
    public string UserId { get; set; }
    public string UserName { get; set; }
    public DateTime LoginDate { get; set; }

}
Run Code Online (Sandbox Code Playgroud)

我需要加入 Activity.UserID = User.UserId。有没有办法像sql一样加入

Art*_*iom 6

来自官方文档

LiteDB 是一个文档数据库,因此集合之间没有 JOIN。如果您需要在另一个文档中引用一个文档,您可以使用 DbRef。可以在初始化数据库或运行查询时或在查询完成后加载此文档引用。

在你的情况下,你可以这样做

public class ActivityLog
{
    [BsonId]
    public int Id { get; set; }
    public DbRef<User> User { get; set; }
    public string Action { get; set; }
    public DateTime ActionDateTime { get; set; }
}


public class User
{
    [BsonId]
    public int Id { get; set; }
    public string UserId { get; set; }
    public string UserName { get; set; }
    public DateTime LoginDate { get; set; }

}


//usage
// Getting user and activityLog collections
var usersCollection = db.GetCollection<User>("Users");
var activityLogsCollection = db.GetCollection<ActivityLog>("ActivityLogs");

// Creating a new User instance
var user = new User { UserId = 5, ...};
usersCollection.Insert(user);

// Create a instance of ActivityLog and reference to User John
var activityLog = new ActivityLog
{
    OrderNumber = 1,
    OrderDate = DateTime.Now,
    //Add it by DbRef
    User = new DbRef<User>(usersCollection, user.UserId)
};
activityLogsCollection.Insert(activityLog)
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参阅文档。