在这里,我们将给大家分享关于为什么使用Limit和FilterExpression进行DynamoDB扫描不返回符合过滤器要求的项目?的知识,同时也会涉及到如何更有效地"Oneormoretypesr
在这里,我们将给大家分享关于为什么使用Limit和FilterExpression进行DynamoDB扫描不返回符合过滤器要求的项目?的知识,同时也会涉及到如何更有效地"One or more types required to compile a dynamic expression cannot be found. Are you missing...、AWS dynamoDB / Update / UpdateExpression /如何通过使用嵌套地图来解决路径重叠的限制?、c# – Dynamic Func,IOrderedQueryable> Expression、c# – Expression-bodied方法:什么都不返回的内容。
本文目录一览:- 为什么使用Limit和FilterExpression进行DynamoDB扫描不返回符合过滤器要求的项目?
- "One or more types required to compile a dynamic expression cannot be found. Are you missing...
- AWS dynamoDB / Update / UpdateExpression /如何通过使用嵌套地图来解决路径重叠的限制?
- c# – Dynamic Func,IOrderedQueryable> Expression
- c# – Expression-bodied方法:什么都不返回
为什么使用Limit和FilterExpression进行DynamoDB扫描不返回符合过滤器要求的项目?
我需要在DynamoDB上进行限制和条件扫描。
该文件说:
在响应中,DynamoDB返回限制值范围内的所有匹配结果。例如,如果您发出的查询或扫描请求的限制值为6,并且没有过滤器表达式,则DynamoDB会返回表中与请求中指定的关键条件匹配的前六个项目(或仅返回前六个项目)。没有过滤器的扫描)。如果还提供FilterExpression值,则DynamoDB将在前六个中返回还与过滤器要求匹配的项目(返回的结果数将小于或等于6)。
代码(NODEJS):
var params = { ExpressionAttributeNames: {"#user": "User"}, ExpressionAttributeValues: {":user": parseInt(user.id)}, FilterExpression: "#user = :user and attribute_not_exists(Removed)", Limit: 2, TableName: "XXXX"};DynamoDB.scan(params, function(err, data) { if (err) { dataToSend.message = "Unable to query. Error: " + err.message; } else if (data.Items.length == 0) { dataToSend.message = "No results were found."; } else { dataToSend.data = data.Items; console.log(dataToSend); }});
表XXXX的定义:
- 主分区键:用户(号码)
- 主排序键:标识符(字符串)
- 指数:
- 索引名称:RemoveedIndex
- 类型:GSI
- 分区键:已删除(数字)
- 排序键:-
- 属性:ALL
在上面的代码中,如果删除该Limit
参数,DynamoDB将返回与过滤器要求匹配的项目。因此,条件还可以。但是当我用Limit
参数扫描时,结果为空。
XXXX表有5个项目。只有2首具有该Removed
属性。当我不带Limit
参数扫描时,DynamoDB返回3个不带Removed
属性的项目。
我做错了什么?
答案1
小编典典从您引用的文档中:
如果还提供FilterExpression值,则DynamoDB将返回 前六项 中也符合过滤器要求的项目
通过组合Limit和FilterExpression,您已经告诉DynamoDB仅查看表中的前两个项目,并针对这些项目评估FilterExpression。DynamoDB中的限制可能会引起混淆,因为它的工作原理与limit
RDBMS中的SQL表达式不同。
"One or more types required to compile a dynamic expression cannot be found. Are you missing...
#事故现场:
在一个.net 4.0 的项目中使用 dynamic,示例代码如下:
1 private static void Main(string[] args)
2 {
3 dynamic obj;
4 obj = new { name = "jack" };
5 Console.WriteLine(obj.name);
6 }
在读取 obj.name 时,报错:
One or more types required to compile a dynamic expression cannot be found. Are you missing references to Microsoft.CSharp.dll and System.Core.dll?
#解决方法:
在项目中,添加 Microsoft.CSharp.dll 的引用;
#参考:
https://stackoverflow.com/questions/11725514/one-or-more-types-required-to-compile-a-dynamic-expression-cannot-be-found-are
——————————————————————————————————————————————————
AWS dynamoDB / Update / UpdateExpression /如何通过使用嵌套地图来解决路径重叠的限制?
如何解决AWS dynamoDB / Update / UpdateExpression /如何通过使用嵌套地图来解决路径重叠的限制??
我想用嵌套映射更新dynamoDB项,在这些项中我不知道这些项是否已经存在。如果已经存在,那就太好了。但是,如果该项目尚不存在,则会出现错误。我没有选择预先创建这些“空”项目/地图的选项。因此,我尝试通过在UpdateExpression中使用两个SET来解决此问题:
UpdateExpression: "SET #info = if_not_exists(#info,:fullData),#info.#version = :shortData",
哪个是我以下错误:
Two document paths overlap with each other; must remove or rewrite one of these paths; path one: [info],path two: [info,V202014]"
有人找到了一个解决方案,而无需尝试,只有两次调用才能阻止(1次更新=>,如果错误添加了新内容)?还是如何避开两条路径的限制?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
c# – Dynamic Func,IOrderedQueryable> Expression
http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/implementing-the-repository-and-unit-of-work-patterns-in-an-asp-net-mvc-application
我正在使用下面的方法来查询EF
public virtual IEnumerable<TEntity> Get( Expression<Func<TEntity,bool>> filter = null,Func<IQueryable<TEntity>,IOrderedQueryable<TEntity>> orderBy = null,string includeProperties = "") { IQueryable<TEntity> query = dbSet; if (filter != null) { query = query.Where(filter); } foreach (var includeProperty in includeProperties.Split (new char[] { ',' },StringSplitOptions.RemoveEmptyEntries)) { query = query.Include(includeProperty); } if (orderBy != null) { return orderBy(query).ToList(); } else { return query.ToList(); } }
现在我想创建动态Func< IQueryable< TEntity>,IOrderedQueryable< TEntity>>表达式来订购我的数据.
我只知道字段名称为字符串和顺序类型(升序,降序)为字符串(asc,desc)
解决方法
public static Func<IQueryable<TEntity>,IOrderedQueryable<TEntity>> GetorderBy(string orderColumn,string orderType) { Type typeQueryable = typeof(IQueryable<TEntity>); ParameterExpression argQueryable = Expression.Parameter(typeQueryable,"p"); var outerExpression = Expression.Lambda(argQueryable,argQueryable); string[] props = orderColumn.Split('.'); IQueryable<TEntity> query = new List<TEntity>().AsQueryable<TEntity>(); Type type = typeof(TEntity); ParameterExpression arg = Expression.Parameter(type,"x"); Expression expr = arg; foreach(string prop in props) { PropertyInfo pi = type.GetProperty(prop,BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance); expr = Expression.Property(expr,pi); type = pi.PropertyType; } LambdaExpression lambda = Expression.Lambda(expr,arg); string methodName = orderType == "asc" ? "OrderBy" : "OrderByDescending"; MethodCallExpression resultExp = Expression.Call(typeof(Queryable),methodName,new Type[] { typeof(TEntity),type },outerExpression.Body,Expression.Quote(lambda)); var finalLambda = Expression.Lambda(resultExp,argQueryable); return (Func<IQueryable<TEntity>,IOrderedQueryable<TEntity>>)finalLambda.Compile(); }
此方法有两个参数,第一个是字段名,另一个是asc或desc.
方法的结果可以直接与IQueryable对象一起使用.
谢谢你的帮助
c# – Expression-bodied方法:什么都不返回
private void SomeMethod() { return; }
现在我想知道是否有可能将其重写为表达式身体方法,因为它只包含返回.
试试1:
private void SomeMethod() => return;
例外:
; expected
Invalid token ‘return’ in class,struct,or interface member declaration
Invalid expression term ‘return’
试试2:
private void SomeMethod() => ;
例外:
- Invalid expression term ‘;’
有没有可能实现这一点(虽然这种方法没有意义)?
解决方法
private void SomeMethod() { }
今天关于为什么使用Limit和FilterExpression进行DynamoDB扫描不返回符合过滤器要求的项目?的分享就到这里,希望大家有所收获,若想了解更多关于"One or more types required to compile a dynamic expression cannot be found. Are you missing...、AWS dynamoDB / Update / UpdateExpression /如何通过使用嵌套地图来解决路径重叠的限制?、c# – Dynamic Func,IOrderedQueryable> Expression、c# – Expression-bodied方法:什么都不返回等相关知识,可以在本站进行查询。
本文标签: