我的问题是我无法让Where
语句与 Entity Framework 一起正常工作。
我有一个类,它具有定义数据库中的一行的属性int
。long
让我们称这些属性Id
为 &Parent
public class Update
{
public long Id { get; set; }
public int Parent { get; set; }
}
然后我有这些更新的列表,我希望每个数据库行都应该匹配列表中的那些更新(两个属性)。
我尝试过的是,我将这些更新转换为匿名类型,并尝试仅查找那些具有完美匹配的行:int 和 long 都是相同的。
// anon type
var mapping = updates.Select(o => new { id = o.Id, parent = o.Parent}).ToList();
var results = from fa in Uvw_MyTable
// PROBLEMATIC WHERE
where mapping.Contains(new { id = fa.Id, parent = fa.Parent })
select new { fa };
但不幸的是,我总是收到一个错误:无法创建“匿名类型”类型的常量值。此上下文仅支持原始类型(“例如 Int32、String 和 Guid”)。
我也试过这样使用Any
:
where mapping.Any(a => fa.Id == a.id && fa.Parent == a.parent)
但我得到同样的错误。当我使用对象列表时也会发生同样的事情Update
。无法创建“xxx.Update”类型的常量值。此上下文仅支持原始类型(“例如 Int32、String 和 Guid”)。
任何想法如何解决这个问题?
更新
这个完全相同的查询在 LINQPad 4 中运行良好
更新 2
问题与这个问题有关吗?
更新 3
正如 Maarten 指出的那样,这个问题需要使用不同方法来重新产生相同结果的解决方案。