如何一次对多个 GUID 进行 linq 过滤生成适当的 sql where 子句

How to linq filter on multiple GUID at once generating an appropriate sql where clause

我很难在 Entity Framework core rc2-final connected 中使用流畅的 API 生成正确过滤的 sql 查询到 sqlite 数据库。

我有以下简单实体:

public class Thing
{
    [Required, Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid Id { get; set; }

    public string Name { get; set; }
}

我需要在数据库中查询我提供的藏书列表中的所有书籍。到目前为止,听起来很容易。我们可以这样写:

// 'GetShortListFromSomewhere' returns 2 items that ALREADY exist in db
List<Thing> externalList = GetShortListFromSomewhere();
var result = db.Things.Where(thing => externalList.Contains(o.Id)).ToList();

但是生成了以下查询,对于 sqlite 来说,它是正确的,但有点……不是……:

SELECT "o"."Id", "o"."Name" FROM "Thing" AS "o"
    WHERE "o"."Id" IN ('7edbc016-abfa-4005-83d1-b39618b047df', '2def16bb-4203-417d-847c-7bdf053a00e8')

正如代码中预期的那样,尽管 ID 完全有效,但此 returns 我 0 项。 Sqlite 上的 Guid 存储在 Blob 上,尽管 EF-Core 似乎可以很好地处理单个项目过滤器的过滤器,但在这种情况下似乎无法处理它。

知道我需要它作为一个 sql 操作,我该如何解决这个问题?

ps:我最不想让 EF Core 从 db 下载整个 Thing 集合,然后对其进行过滤!对我来说这太疯狂了。

这是问题#5801。不幸的是,它不会在 1.0.0 版本中修复。要解决此问题,请将列映射到 byte[] 属性。