我有两个可评价对象E
和S
,S包含在E中,所以你说E.S并且他们都使用相同的对象R
来评价; R一次只能有一个评级对象,所以如果R.E.HasValue == true
那么R.S.HasValue
永远不会成真。
我有来自数据库的所有R对象,我有E.什么是lambda表达式来获取所有Rs在E.S中的R.S?
更新
我找到了MSDN Documentation,其中说:
引用非标量变量, 例如实体,在查询中不是 支持的。执行此类查询时 NotSupportedException异常是 抛出一条消息说明 “无法创建一个恒定值 输入EntityType。只有原始类型 ('如Int32,String和Guid') 在这种情况下得到支持。“
所以......自查询读取
以来,我无法使用A-Dubb的答案R.Where(r => r.SID.HasValue).Where(r => E.S.Contains(r.S))
哪个会导致NotSupportedException
...我仍然拥有R.SID
类型的属性int?
,但我怎么能查询所有ES以获取其ID?
P.S。 E.S.是EntityCollection类型。
答案 0 :(得分:3)
我会说IN子句通常用Contains来表示。例如
public class R {
public int Id {get; set;}
}
public IEnumerable<R> InClause(IEnumerable<int> ids) {
var subset = ids.ToList();
return dbContext.Query<R>.Where(r => subset.Contains(r.Id));
}
我知道这不是EF中的确切API调用,但它应该有助于为您的解决方案设置基础。也许你已经知道如何生成IN子句但我想如果你这样做,那么你可能不会被卡住。如果IN子句不是查询的难点部分那么是什么?也许你提到的业务逻辑?同样,C#对象模型会有所帮助。
答案 1 :(得分:0)
使用contains的问题是,它更接近sql“like”而不是“in”。因此,如果您有用户输入说8位数ID和某人 输入0然后包含将返回所有id的零,其中包含零。