小编Ben*_*son的帖子

在特定时区找到LocalDate的最后可能瞬间的最佳方法是什么?

抱歉,如果这似乎是一个简单的问题,但我大多只想检查我所拥有的解决方案对于所有情况都是最明智/最有效的.

我们使用的预先存在的SQL Server数据库将'period'存储为包含start - >包含结束UTC DateTime值.(开始和结束列都会datetime2(7)自动转换为我们开始使用它们之前的System.DateTime实例DateTimeKind.UTC).

因此,如果我需要存储"整天/月/年,给定用户的时区",我需要找到"特定DateTimeZone中指定LocalDate的最后一个可能的瞬间".

我的方法如下:

public static LocalDateTime AtEndOfDay(this LocalDate localDate)
{
    return localDate
        .PlusDays(1)
        .AtMidnight()
        .PlusTicks(-1);
}

public static ZonedDateTime AtEndOfDay(this DateTimeZone zone, LocalDate localDate)
{
    return zone
        .AtStartOfDay(localDate.PlusDays(1))
        .Plus(Duration.FromTicks(-1));
}
Run Code Online (Sandbox Code Playgroud)

我想我还需要避免(在任何其他地方)映射"日期结束" LocalDateTime使用,.AtLeniently(..)因为如果23:59:59.9999999被"跳过"并且在目标中不存在DateTimeZone,那么它将被映射到下一个可用的瞬间缺口00:00:00.000000的'外侧',这将给我一个独家 ZonedDateTime价值.

修订方法:

public static LocalDateTime AtEndOfDay(this LocalDate localDate)
{
    // TODO: Replace with localDate.At(LocalTime.MaxValue) when NodaTime 2.0 is released.
    return localDate
        .PlusDays(1)
        .AtMidnight()
        .PlusTicks(-1);
}

public static ZonedDateTime …
Run Code Online (Sandbox Code Playgroud)

c# nodatime

9
推荐指数
1
解决办法
541
查看次数

在使用自定义格式作为参考时,如何使用Json.NET通过引用反序列化对象?

我有以下格式的JSON:

{
    "users": [
        {
            "first_name": "John",
            "last_name": "Smith",
            "vet": [ "FOO", "VET-1" ],
            "animals": [ [ "FOO", "ANIMAL-22" ] ]
        },
        {
            "first_name": "Susan",
            "last_name": "Smith",
            "vet": [ "FOO", "VET-1" ]
        }
    ],
    "BAR": {
        "VET-1": {
            "vet_name": "Acme, Inc",
            "vet_id": 456
        },
        "ANIMAL-22": {
            "animal_name": "Fido",
            "species": "dog",
            "animal_id": 789,
            "vet": [ "FOO", "VET-1" ]
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

某些嵌套对象或多次引用的对象被序列化为引用.

然后,引用的对象包含在BARJSON对象末尾的数组中,并由[ "FOO", "ANIMAL-22" ]数组确定.

(这两个FOOBAR是静态常数,和ANIMAL-22/ VET-1标识符是半随机的)

不幸的是,这与Json.NET …

c# json json.net deserialization json-deserialization

6
推荐指数
1
解决办法
1114
查看次数

为什么在使用此 Regex 时会忽略 ASP.NET-MVC 路由的 UrlParameter.Optional?

这是我今天早上在使用 ASP.NET MVC 的 URL 路由时遇到的一个问题的精简示例。

相当简单,我想要调用路由的 Action,无论是否提供了最后的参数。

这条路线工作正常,匹配/apple//apple/test/

路线.MapRoute(
    《工作路线》
    "苹果/{参数}",
    新的 { 
        控制器 = "苹果", 
        action = "动作", 
        参数 = UrlParameter.Optional
    },
    新 { 参数 = @"([a-z0-9\.-]+)" }
);

但是,第二条路线只会匹配/banana/test/等。当我尝试/banana/ 时,路由器正好经过它并返回全部 404 错误。

路线.MapRoute(
    "非工作路线",
    "香蕉/{参数}",
    新的 { 
        控制器 = "香蕉", 
        action = "动作", 
        参数 = UrlParameter.Optional
    },
    新 { 参数 = @"([a-z0-9]+)" }
);

唯一的区别是参数的正则表达式验证,但由于它是一个非常简单的正则表达式匹配,它们对于像/banana/这样的 URL 应该都可以正常工作,但第二条路由无法识别它。

我只是通过更改路线 #2 上的正则表达式以匹配路线 #1 上的正则表达式来回避我的问题,并接受 '.' 和“-”字符,我只是想知道是否有人知道为什么会发生这种情况。

编辑:

以下是我在示例中使用的控制器和操作。这里没什么好看的。

公共类 AppleController …

regex asp.net-mvc routing url-routing asp.net-mvc-2

5
推荐指数
1
解决办法
6062
查看次数

尝试在父集合表达式中使用父属性作为参数; LinqKit抛出"无法将MethodCallExpressionN强制转换为LambdaExpression"

我正在尝试动态构造一个类似于下面的表达式,我可以使用相同的比较函数,但是可以传入被比较的值,因为值是从属性'higher-up'传递的查询.

var people = People
    .Where(p => p.Cars
        .Any(c => c.Colour == p.FavouriteColour));
Run Code Online (Sandbox Code Playgroud)

我相信我已正确构造了查询,但是ExpressionExpander.VisitMethodCall(..)当我尝试使用它时,该方法会抛出以下异常:

"无法将'System.Linq.Expressions.InstanceMethodCallExpressionN'类型的对象强制转换为'System.Linq.Expressions.LambdaExpression'"

在真实世界的代码中,使用实体框架和实际IQueryable<T>,我经常得到:

"无法将类型为'System.Linq.Expressions.MethodCallExpressionN'的对象转换为'System.Linq.Expressions.LambdaExpression'".

我构建了一个LinqPad友好的问题示例,就像我能做到的那样简单.

void Main()
{
    var tuples = new List<Tuple<String, int>>() {
        new Tuple<String, int>("Hello", 4),
        new Tuple<String, int>("World", 2),
        new Tuple<String, int>("Cheese", 20)
    };

    var queryableTuples = tuples.AsQueryable();

    // For this example, I want to check which of these strings are longer than their accompanying number.
    // The expression I want to build needs to use one of the …
Run Code Online (Sandbox Code Playgroud)

c# linq expression linq-expressions linqkit

5
推荐指数
1
解决办法
959
查看次数