执行SQL";在";等效EF

本文关键字:quot EF 等效 SQL 执行 | 更新日期: 2023-09-27 18:01:02

我有两个可评级对象ES,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。

执行SQL";在";等效EF

我会说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。