- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
假设我有两个用外键约束连接的表。考虑以下代码:
using(var dc = TestDataContext())
{
IQueryable<ParentTable> query = dc.ParentTable;
query = query.Where(t => t.ChildTable.Where(c => c.Name.StartsWith("#")).Any());
Console.WriteLine(query.Count());
}
如果我需要扩展 Where
在某些条件下,我会简单地链接 Where
子句:
if(...)
query = query.Where(...);
...
事实上它会被添加到原来的Where
通过 AND
条款sql语句。
现在想象一下,我需要动态构造 Where
关于 ChildTable
的条款在 ParentTable
内Where
子句...
我试着这样做:
using(var dc = TestDataContext())
{
IQueryable<ParentTable> query = dc.ParentTable;
//here specify the necessary condition
Func<ChildTable, bool> where;
if(...)
where = c => c.Name.StartsWith("#");
else ...
query = query.Where(t => t.ChildTable.Any(where));
Console.WriteLine(query.Count());
}
但是它会抛出 NotSupportedException
,表示无法正确转换 where
Func
指定用于 Any
进入 sql。
我想我可以指定 Expression<Func<ChildTable, bool>>
,但是t.ChildTable
是EntitySet<ChildTable>
所以它没有实现 IQueryable<T>
...所以一个自定义 Func<>
无法正确翻译成 sql。
除了每次都简单地重写整个语句之外,有没有办法实现这个目标:
1. query = query.Where(t => t.ChildTable.Where(c => c.Name.StartsWith("#")).Any());
2. query = query.Where(t => t.ChildTable.Where(c => c.Name.StartsWith("#") && ...).Any()));
...
最佳答案
在需要动态 where 子句的情况下,我喜欢使用 PredicateBuilder .
将该站点上的示例翻译成您的问题会给出以下代码。如果您使用的是 EF,则可能需要使用 .AsExpandable()
,请参阅链接了解更多信息。
var predicate = PredicateBuilder.False<ParentTable>();
predicate = predicate.Or(p => p.ChildTable.Any(c => c.Name.StartsWith("#"));
var keywords = "search terms go here";
foreach (var keyword in keywords)
{
var temp = keyword;
predicate = predicate.Or(p => p.ChildTable.Any(c => c.Name.Contains(temp));
}
using(var dc = TestDataContext())
{
Console.WriteLine(dc.ParentTable.Where(predicate).Count());
}
关于c# - 如何为 EntitySet 构造 Where 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23692012/
当我尝试向 EntitySet 添加新项目时,出现以下异常: An entity with the same identity already exists in this EntitySet 但是,
我试图用谷歌搜索它,但在所有示例中都没有很好地解释。在以下上下文中,EntitySet() 方法究竟是什么? private static IEdmModel GetEdmModel()
我有这段代码...看起来不错而且优雅,但显然框架不喜欢它,因为我在遍历它时弄乱了一个集合: foreach (KitGroup kg in ProductToTransfer.KitGroups)
这个问题在这里已经有了答案: Value cannot be null. Parameter name: entitySet (12 个答案) 关闭 5 年前。 using System; usin
我在 Linq to SQL 中有一个实体集,假设一个人有多个地址。然后用这段代码 person.Addresses.Add(address); person.Addresses.Last(). ..
如何转换 System.Collections.Generic.List到 System.Data.Linq.EntitySet ? 最佳答案 不要认为你可以转换 List到EntitySet但您可以
对于每个与其他实体具有一对多关系的实体,当我尝试添加新项目时,似乎我必须定义与该实体相关的这些项目列表。例如,假设我有一个 ProductType 实体,其中有一个 Products 列表,如下所示:
我尝试按照 featuretools.com 的文档学习功能工具。 出现错误:AttributeError: 'EntitySet' 对象没有属性 'entity_from_dataframe' 你能
在 LINQ to SQL 类中,为什么从外键 EntitySet 创建的属性对象,实现 IEnumerable , 其中作为 DataContext 上的对象是 Table实现 IQueryable
我有一个相当标准的设置,只有 POCO 类 public class Project { public int ProjectId { get; set; } public strin
我在处理某些 dbml 生成的类时遇到了问题,这些类无法解析为高效的 SQL。想象一下,我有一个帐户表和一个交易表,其中每笔交易都与特定帐户相关联。我将所有这些加载到 dbml 中,然后弹出一个 Ac
我在导入存储过程然后创建复杂类型并将函数命名为导入“sproc_Forums_GetForumGroupByID”后出现此错误,一旦选择了 GridView,此过程就会从 ObjectDataSour
当我从 Controller 访问模型的数据时。我收到此错误 EntitySet 'Department' is based on type 'Admin' that has no keys defi
假设我有两个用外键约束连接的表。考虑以下代码: using(var dc = TestDataContext()) { IQueryable query = dc.ParentTable;
这是我第一次尝试了解来自 Net Tiers 的 Linq to Entity。与它作斗争但不理解它背后的一些逻辑……例如。我什么时候使用: Entity.EntitySet.Load() 和 con
希望有人能给出一些启示,也许是我遇到的这个问题的可能解决方案...... 我使用 LINQ to SQL 将一些数据从数据库提取到本地实体中。它们是来自购物车系统的产品。产品可以包含 KitGroup
有 3 种方法可以将项目添加到大多数列表... 通过直接的公共(public) API 方法,通常是 Add(SomeType) 通过通用 IList.Add(T)界面 通过非通用 IList.Add
我想知道 LINQ-to-SQL 中 EntitySet 和 EntityRef 之间的真正区别。据我所知,EntitySet 是一对多或多对多的关系,而 EntityRef 是一对一的。如果我错了,
引用deployment page中提到的featuretools'v0.7.0'的部署方法 我使用ft.save_features方法保存了我的feature_defs,但是在使用ft.load_f
我有一个类层次结构,我通过 LINQ to SQL Controller 从数据库中获取这些类,并根据需要显示那个大类。让我解释一下: BigProduct IEnumerable //...some
我是一名优秀的程序员,十分优秀!