GVKun编程网logo

为什么使用Limit和FilterExpression进行DynamoDB扫描不返回符合过滤器要求的项目?

15

在这里,我们将给大家分享关于为什么使用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扫描不返回符合过滤器要求的项目?

为什么使用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中的限制可能会引起混淆,因为它的工作原理与limitRDBMS中的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 /如何通过使用嵌套地图来解决路径重叠的限制?

如何解决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

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方法:什么都不返回

c# – Expression-bodied方法:什么都不返回

当我找到一个实际上什么都不做的方法时,我正在将我们的一个项目更新到C#6.0:
private void SomeMethod()
{
    return;
}

现在我想知道是否有可能将其重写为表达式身体方法,因为它只包含返回.

试试1:

private void SomeMethod() => return;

例外:

  1. ; expected

  2. Invalid token ‘return’ in class,struct,or interface member declaration

  3. Invalid expression term ‘return’

试试2:

private void SomeMethod() => ;

例外:

  1. 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方法:什么都不返回等相关知识,可以在本站进行查询。

本文标签: