如何一次对多个 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[]
属性。
我很难在 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[]
属性。