小编Tra*_*den的帖子

WPF与弹出窗口的对决

我刚刚从Windows 7将我的PC移动到Windows 8,在运行我们的WPF应用程序时,我注意到我们的WPF弹出窗口和/或工具提示现在默认情况下位于左下角,而不是正常的右下角.有没有人注意到这个?我知道你可以在xaml的每个工具提示中指定它们的位置,但我们有很多工具提示和弹出窗口.我想知道是否有办法在WPF应用程序中全局指定默认位置.谷歌在这个问题上没有取得很多成果.我们有理由将它们保持在相同的原始默认位置(某些弹出窗口具有相对于其启动位置的内容).

Windows 8 :(左下)

Win8上的工具提示

Windows 7 :(右下)

Win7上的工具提示

相同的代码!标准的"工具提示"xaml属性.

有任何想法吗?

已经解决,我发表了评论


好的,我发现了这个问题.它与平板电脑/触摸屏有关.(左撇子...右手偏好)这另一个链接提供了一个原因.我正在制定一个解决方案来解决这个问题.生病了很快就会发布!

Windows 8弹出位置

.net wpf xaml tooltip windows-8

17
推荐指数
2
解决办法
3929
查看次数

实体框架6 - 缺少表,只有主键引用不同的表

当我们离开Linq2Sql时,我们正在学习Entity Framework 6.1(来自NuGet).我们有一小部分表关联两个单独的表,如下所示.

EF6数据库第一代

数据库图:

在此输入图像描述

架构概述:

在此输入图像描述

当在Visual Studio,空白类库中,执行Database First EF6 EDMX文件时,该图只生成TableA和TableC - TableB不会生成.

在此输入图像描述

视觉工作室查看:

在此输入图像描述

您可以看到只创建了TableA和TableC.从技术上讲,应该已经创建了TableB,因为您希望能够管理这些引用.

图中所示的A和C之间的关联:

在此输入图像描述

我觉得我错过了一个选项,或者误解了实体框架的一个关键概念.知道如何用T4生成缺少的TableB吗?EDMX文件确实显示它,但由于某种原因,它不会生成到.CS文件中,其中两个属性指示关系.

我们需要这个的主要原因是我们扩展了EF6 T4模板以添加一些工厂模式以匹配我们现有的模型.因为它不会为TableB生成一个类,所以我们不会得到我们正在寻找的自动生成的代码.

想法/建议?谢谢.

.net c# entity-framework entity-framework-6

14
推荐指数
1
解决办法
5906
查看次数

从IQueryable <T>中删除OrderBy

我有一个分页API,它返回用户请求的行,但一次只有这么多,而不是整个集合.API按设计工作,但我必须计算可用的记录总数(正确的页面计算).在API中,我使用Linq2Sql,在我最终提出请求之前,我在IQueryable上工作了很多.当我去计算时,我会调用类似于:totalRecordCount = queryable.Count();

结果SQL很有意思,但它也增加了一个不必要的Order By,这使得查询非常昂贵.

exec sp_executesql N'SELECT COUNT(*) AS [value]
FROM (
    SELECT TOP (1) NULL AS [EMPTY]
    FROM [dbo].[JournalEventsView] AS [t0]
    WHERE [t0].[DataOwnerID] = @p0
    ORDER BY [t0].[DataTimeStamp] DESC
    ) AS [t1]',N'@p0 int',@p0=1
Run Code Online (Sandbox Code Playgroud)

因为我正在使用IQueryable,所以我可以在它进入SQL服务器之前操作IQueryable.

我的问题是,如果我已经有一个带有OrderBy的IQueryable,是否可以在调用Count()之前删除该OrderBy?

喜欢:totalRecordCount = queryable.NoOrder .Count();

如果没有,没有大事.我看到很多关于OrderBy的问题,但没有涉及从Linq表达式中删除OrderBy的任何问题.

谢谢!

.net c# linq iqueryable linq-to-sql

11
推荐指数
2
解决办法
3616
查看次数

无法分配条件访问表达式 - C#null-propagation + = events

我最喜欢的一个C#功能是CS6中的" 零传播 ".

这为我们许多人清理了很多代码.

我遇到的情况似乎不太可能.我不知道为什么我虽然null传播只是一些编译器魔术,它为我们做了一些空检查,允许我们保持更清晰的代码.

在挂钩事件的情况下..

 public override void OnApplyTemplate()
    {
        _eventStatus = base.GetTemplateChild(PART_EventStatus) as ContentControl;

        // This not permitted and will not compile
        _eventStatus?.IsMouseDirectlyOverChanged += EventStatusOnIsMouseDirectlyOverChanged;

        // but this will work
        if(_eventStatus != null) _eventStatus.IsMouseDirectlyOverChanged += EventStatusOnIsMouseDirectlyOverChanged;

        base.OnApplyTemplate();
    }

    private void EventStatusOnIsMouseDirectlyOverChanged(object sender, DependencyPropertyChangedEventArgs dependencyPropertyChangedEventArgs)
    {
        throw new NotImplementedException();
    }
Run Code Online (Sandbox Code Playgroud)

编译输出显示:

 error CS0079: The event 'UIElement.IsMouseDirectlyOverChanged' can only appear on the left hand side of += or -=
Run Code Online (Sandbox Code Playgroud)

Resharper投诉

所以,我的问题是 - 我对误传播的误解是什么?为什么这不是允许的语法?

.net c# c#-6.0 null-propagation-operator

7
推荐指数
1
解决办法
1402
查看次数

2017年TFS - VS 2017 15.5更新后默认为MSBuild 14.需要MSBuild 15回来

我们的TFS 2017服务器/构建服务器,我们使用"Visual Studio Installer"将Visual Studio 2017更新到最新版本(15.5.27130)以支持某些功能/修复.当我们进行更新时,TFS构建过程现在默认为MSBuild 14.0,它没有我们在MSBuild 15中使用的C#功能.我已经尝试更新TFS 2017 Update 3,以及完全卸载VS 2017并重新安装.没有区别.由于错误的MS Build,我们所有的构建服务现在都失败了.这已经与TFS 17,VS 17合作了一年没有问题.

我可以在路径"C:\ Program Files(x86)\ Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin"中看到MSBuild 15

我的TFS构建定义也有"最新"以及我选择2017年时 - 但没有任何区别.

在此输入图像描述

我也在构建的输出中看到了这个问题:

在此输入图像描述

怎么没被发现?如何更改默认值?

注意 - 我不确定这是否适合StackOverflow,但它是与更多熟悉的人相关的开发.

在此输入图像描述

msbuild tfsbuild visual-studio visual-studio-2017 tfs2017

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

.net文化特定的12/24小时格式

有没有办法保持文化特定的日期时间格式,但强制12/24小时渲染?我知道我可以用实际的日期/时间格式字符串做很多事情HH:mm:ss ,hh:mm:ss但我想尊重当前的用户文化格式(即mm/dd/yyyyyyyy/mm/dd等),只需强制12/24小时的时间渲染.

c# wpf datetime cultureinfo

4
推荐指数
2
解决办法
1万
查看次数

实体框架+ DayOfWeek

使用System.Linq.Dynamic(在这里管理https://github.com/kahanu/System.Linq.Dynamic),我试图使用Entity Framework 6(或更高版本)捕获在聚合目的DayOfWeek上找到的字段DateTime.

以前要求类似的东西,这有很大帮助,动态Linq +实体框架:动态选择的日期时间修改

实体框架支持DayOfWeek使用

SqlFunctions.DatePart("dw", datetime?)
Run Code Online (Sandbox Code Playgroud)

或者我们可以用类似的东西做一些更需要的东西

DbFunctions.DiffDays(date?, date?).  
Run Code Online (Sandbox Code Playgroud)

理念:

让Linq的DayOfWeek成为实体

我发现这非常有趣,我喜欢它,因为它不使用SqlFunctions可能让我局限于SQL Server的东西.此外,开发人员可以控制一周的第一天,而无需查询SQL Server属性以查找其配置方式(第一天).

出于实验目的,我一直试图在VisitMember()覆盖中实现这一点:

protected override Expression VisitMember(MemberExpression node)
{
     if (node.Type == typeof(System.DayOfWeek))
     {
          var firstSunday = new DateTime(1753, 1, 7);

                var firstSundayExpression = Expression.Constant(firstSunday, typeof(DateTime?));
                var timeValue = node.Expression;
                if (timeValue.Type != typeof(DateTime?)) timeValue = Expression.Convert(timeValue, typeof(DateTime?));
                var methodCall = Expression.Call(
                              typeof(DbFunctions), "DiffDays", Type.EmptyTypes, firstSundayExpression, timeValue);
                return Expression.Convert(methodCall, typeof(int?));
      } …
Run Code Online (Sandbox Code Playgroud)

c# linq expression-trees dynamic-linq entity-framework-6

4
推荐指数
1
解决办法
1820
查看次数

动态Linq +实体框架:动态选择的日期时间修改

我正在尝试找到一种方法在执行sql分组之前将UTC时间移动到Local.我正在使用System.Linq.Dynamic(在这里管理https://github.com/kahanu/System.Linq.Dynamic).它非常适合进行动态选择而无需在编译时获得所需的字段.在我们的例子中,我们以UTC格式存储所有日期时间.在这个动态选择中,可能有人想要在小时,年,月等上进行分组.在这种情况下,我们必须将数据移动到本地时间,以防止混淆.

例:

var select = queryable.Select(string.Format("new ({0}, {1})", datetimeColumn, someOtherColumn));
Run Code Online (Sandbox Code Playgroud)

通常在我们的tsql或甚至在使用lambda表达式的实体框架中,您可以添加所需的偏移量.但是在动态linq选项中,您似乎无法像使用Linq2Sql那样执行任何日期操作,如DateTime.AddHours(x)或DateTime.Subtract(x).实体框架6希望您使用DbFunctions.AddHours(x)等.但是动态linq代码在没有修改的情况下不会接受DbFunction而不会出错.

例:

var select = queryable.Select(string.Format("new (System.Data.Entity.DbFunctions.AddHours({0},7) as {0}, {1})", datetimeColumn, someOtherColumn));
Run Code Online (Sandbox Code Playgroud)

返回错误:XXX类型
中不存在属性或字段"System" (删除命名空间无效).

使用所需的代码:

var select = queryable.Select(string.Format("new ({0}.AddHours(7), {1})", datetimeColumn, someOtherColumn));
Run Code Online (Sandbox Code Playgroud)

结果有错误:LINQ to Entities无法识别方法'System.DateTime AddHours(Double)'方法,并且此方法无法转换为商店表达式.

我希望SQL在groupby之前执行日期时间数学运算.一旦groupby发生,就不再有UTC的概念,因为用户将看到本地化的结果集.

我担心我只是为了支持传递实体框架扩展而更新我的github fork以支持传递实体框架扩展,但在此之前,想知道是否有其他人有解决方案或想法.

注意:由于更改SQL数据存储技术的可能性,我没有使用DateTimeOffset.

.net c# dynamic-linq entity-framework-6

2
推荐指数
1
解决办法
651
查看次数