1

我在 MVC 应用程序中使用 Entity Framework 5。我保存了一个匹配列表,在进行实际更新之前,我想将所有发布的匹配加载到 EF 内存中。

我有以下代码(有效)。_context 是我的 EfDbContext:

public bool UpdateMatches(IEnumerable<Match> matchesToUpdate, int userID)
{
    matchesToUpdate = matchesToUpdate as List<Match> ?? matchesToUpdate.ToList();
    var matchIDs = matchesToUpdate.Select(m => m.ID).ToArray();

    _context.Matches.Where(x => matchIDs.Contains(x.ID)).Load();
}

但我真正想要的是这样的:

public bool UpdateMatches(IEnumerable<Match> matchesToUpdate, int userID)
{
    _context.Matches.Where(m => matchesToUpdate.Any(x => x.ID == m.ID)).Load();
}

但我得到了错误

“无法创建‘匹配’类型的常量值。在此上下文中仅支持原始类型或枚举类型。”

我也尝试使用包含,但没有运气。我究竟做错了什么?

4

1 回答 1

2

ID从您的matchesToUpdate收藏中获取列表并使用Contains,而不是Any

public bool UpdateMatches(IEnumerable<Match> matchesToUpdate, int userID)
{
    var ids = matchesToUpdate.Select(x => x.ID).ToList();
    _context.Matches.Where(m => ids.Contains(m.ID)).Load();
}

它将导致IN生成的 SQL 查询中的语句。

于 2013-04-13T06:38:23.283 回答