执行SQL";在";等效EF
本文关键字:quot EF 等效 SQL 执行 | 更新日期: 2023-09-27 18:01:02
我有两个可评级对象E
和S
,S包含在E中,所以你说E.S,它们都使用相同的对象R
进行评级;R一次总是只有一个额定对象,所以如果R.E.HasValue == true
,则R.S.HasValue
永远不会为真。
我有数据库中的所有R对象,还有E。要得到所有R,lambda表达式是什么??
更新
我发现了这个MSDN文档,上面写着:
引用非标量变量,例如查询中的实体支持。当执行这样的查询时,NotSupportedException异常为引发的消息"无法创建的常量值type EntityType。仅基元类型(例如Int32、String和Guid(在此上下文中支持。">
所以。。。我无法使用A-Dubb的答案,因为查询读取
R.Where(r => r.SID.HasValue).Where(r => E.S.Contains(r.S))
从而产生NotSupportedException
。。。我仍然有属性R.SID
,它的类型是int?
,但我怎么能查询所有的E.S来获得它们的ID呢?
p.S.E.S.的类型为EntityCollection。
我会说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#对象模型会有所帮助。
使用contains的问题是,它更接近sql"like"而不是"in"。因此,如果你有用户输入,比如8位ID和某人输入0,然后包含将使您返回其中某个位置为零的所有id。