我有一组交易,每个交易都有一个允许访问交易的用户ID列表。
只需用
查询Ravenvar theId = 6;
var deals = session.Query<Deal>().Where(x => x.UserIds.Contains(theId)).ToList();
Deal类看起来像
public class Deal {
public Int32 Id { get; set; }
public List<Int32> UserIds = new List<Int32>();
}
异常结果
Could not understand expression: .Where(x => x.UserIds.Contains(value(Deals_Manager.Controllers.DealsController+<>c__DisplayClass4).theId))
内部异常
{"Expression type not supported: value(Deals_Manager.Controllers.DealsController+<>c__DisplayClass4).theId"}
问题是什么?
答案 0 :(得分:3)
Contains
中的Where
是一个非常难以转换为UserIds:6
的Lucene表达式的表达式树,更不用说当你引入一个闭包来将外部变量带入lambda表达式。 (顺便说一句,关闭是让你的例外看起来如此愚蠢。)
更复杂的是,您的模型是一个List,它有自己的Contains
特殊版本,与IEnumerable
版本不同。
尝试使用此尺寸代替:
var theId = 6;
var deals = session.Query<Deal>()
.Where(x => x.UserIds.Any(id => id == theId))
.ToList();
对于Raven无法理解的任何表达式树,只需尝试用更原始的术语来思考它。