小编Tod*_*les的帖子

为什么这个子查询不会导致错误?

我对SQL查询感到困惑,老实说,这是我甚至不确定如何谷歌的东西之一.因此StackOverflow.

我认为这是一个简单的查询.

SELECT Id
FROM Customer
WHERE Id IN (SELECT Id from @CustomersWithCancelledOrders)
Run Code Online (Sandbox Code Playgroud)

这是我发现奇怪的地方.@CustomersWithCancelledOrders表变量中没有名为Id的列.但没有错误.

这导致所有客户的ID.每一个.这显然违背了首先进行子查询的要点.

这就像它使用外表(客户)中的Id列,但我不明白为什么会这样做.有没有理由你想这样做?我错过了一些非常明显的东西吗?

SQLFiddle的怪异.它不是最好的SQL小提琴,因为我找不到在该网站上返回多个结果集的方法,但它演示了我如何处理该问题.

我想我正在寻找的是上面"功能"的名称,某些信息是关于它为什么做它做什么以及错误查询实际意味着什么.


我已经更新了上面的问题以使用稍微好一些的例子.它仍然是人为的,但它更接近我实际遇到问题时写的剧本.


在对相关子查询进行一些读取之后,看起来我的拼写错误(使用子查询中的错误Id列)会更改子查询的行为.

而不是一次评估子查询的结果,然后将这些结果作为一个集合(这就是我的意图),它会为外部查询中的每一行计算子查询.

这意味着子查询为每行评估一组不同的结果,并保证该组结果中包含该行的客户ID.子查询返回一个由重复X次的行的Id组成的集合,其中X是从中选择的表变量中的行数.

...

很难写下我对这个问题的理解的简明描述.抱歉.我觉得我现在很好.

sql-server

18
推荐指数
2
解决办法
1853
查看次数

自动测试期间的WPF组件资源

我已经达到了这样的程度,我想编写一个自动化测试来验证WPF视图的内容,该视图与特定状态下的视图模型绑定.

在概念上,它相当简单.创建视图模型,设置其状态,创建适当的视图,将视图添加到窗口,设置视图的数据上下文,显示窗口,截取屏幕截图,与先前截取的屏幕截图进行比较.此类测试对于检测意外更改以及验证是否可以无误地创建所有View都非常有用.

但是,创建我的View实例证明是有问题的.它需要一组未包含在XAML定义中的资源.这些资源包含在实际应用程序中的应用程序级资源字典中,因此在实际应用程序中创建View时,这些资源已经可用.

当我在我的测试中创建此View的实例时,它会抛出一个关于无法找到各种资源的XamlParseException(可以理解).

我不想简单地将适当的资源字典添加到View本身的XAML定义中,因为这会增加创建其中一个View对象所需的工作量(计算机工作量),以及增加每个所需的内存量.实例.我的理解是,这是ResourceDictionary没有以这种方式共享的结果.

我试过了:

  • 在测试中创建App.xaml的实例(设置Application.Current属性).
  • 将Application.Current.Resources属性设置为App.xaml实例的Resources属性.
  • 直接设置Page的Resources属性.
  • 直接设置Window的Resources属性(为测试添加页面的Window).

从本质上讲,我需要知道是否有办法设计一种情况,我可以为自动测试中使用的WPF组件的独立实例配置一组应用程序资源.

您可以通过创建以下结构来重现该问题,除了一个项目中的View_Test.cs文件之外的所有文件,以及生活在测试项目中的View_Test.cs文件.运行应用程序,它的工作原理.运行测试但失败.

App.xaml中

<Application 
    x:Class="Blah.App"        
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    StartupUri="MainWindow.xaml">
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="Styles.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
</Application>
Run Code Online (Sandbox Code Playgroud)

Styles.xaml

<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <SolidColorBrush x:Key="SpecialBrush" Color="Black" />
</ResourceDictionary>
Run Code Online (Sandbox Code Playgroud)

MainWindow.xaml

<Window 
    x:Class="Blah.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:Blah="clr-namespace:Blah"
    Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Blah:View/>
    </Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)

View.xaml

<UserControl 
    x:Class="AutomatedTestUserControlApplicationResources.View"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    mc:Ignorable="d" 
    d:DesignHeight="300" d:DesignWidth="300">
    <Grid Background="{StaticResource SpecialBrush}">

    </Grid>
</UserControl>
Run Code Online (Sandbox Code Playgroud)

View_Test.cs

using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Blah;
using System.Windows;

namespace Blah.Test
{
    [TestClass]
    public class …
Run Code Online (Sandbox Code Playgroud)

c# testing wpf xaml

10
推荐指数
1
解决办法
1836
查看次数

当程序集路径包含空格时,无法在Visual Studio 2013中分析测试

每当我尝试在Visual Studio 2013中配置测试时,通过右键单击测试资源管理器中的测试,然后选择"配置文件测试"选项,测试成功执行(并通过),但性能分析失败并显示以下消息.

File contains no data buffers
File contains no data buffers
Analysis failed
Run Code Online (Sandbox Code Playgroud)

我使用的是Windows 7 64.

我可以成功地分析应用程序本身(仪器和采样),没有任何问题.

profiling visual-studio-2013

10
推荐指数
1
解决办法
4493
查看次数

无法将类型为"Castle.Proxies.XProxy"的对象转换为在WPF设计器中键入"X"

我最近发现了Blend for WPF组件非常有用的设计时属性,其中(除其他外)允许您仅在设计时设置DataContext.真棒!

结合DesignInstance属性,您可以设置在设计时自动创建和绑定的类型,允许您使用Visual Studio Designer以及WPF组件在运行时实际看起来的内容.它非常好,我希望它没有花太多时间去发现.

显然,因为我在这里而不是在程序员天堂里生活,所以在使用这些设计时属性时我遇到了一个问题.

我在一个我的ViewModels周围创建了一个设计时包装器,它有一个无参数构造函数(所以它可以由设计者创建).在它的构造函数中,它使用NSubstitute来模拟注入它继承的ViewModel的所有依赖项.

在设计器中使用此设计时间类会导致错误,如下所示:

Unable to cast object of type 'Castle.Proxies.XProxy' to type 'X'.

(将X替换为我注入的依赖项之一).

您可以使用以下最小代码集来重现该问题.

在VS2013中创建一个针对.NET Framework 4.5.1的WPF应用程序(在以前的版本中也可能发生,我不知道),其中包含以下文件.

View.xaml

<Page 
    x:Class="DesignTimeNSubstituteIssue.Views.View"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:DesignTimeNSubstituteIssue_Views_DesignTime="clr-namespace:DesignTimeNSubstituteIssue.Views.DesignTime"
    mc:Ignorable="d" 
    d:DataContext="{d:DesignInstance Type=DesignTimeNSubstituteIssue_Views_DesignTime:DesignTimeViewModel, IsDesignTimeCreatable=True}">
    <Grid>
        <TextBlock Text="{Binding Message, FallbackValue=Design_Time_Message_Failed_Using_Fallback}"/>
    </Grid>
</Page>
Run Code Online (Sandbox Code Playgroud)

ViewModel.cs

using DesignTimeNSubstituteIssue.Services;

namespace DesignTimeNSubstituteIssue.ViewModels
{
    public class ViewModel
    {
        public ViewModel(XDependency dependency)
        {
            _Dependency = dependency;
        }

        private readonly XDependency _Dependency;
        public string Message { get; protected set; }
    }
}
Run Code Online (Sandbox Code Playgroud)

DesignTimeViewModel.cs

using DesignTimeNSubstituteIssue.Services;
using DesignTimeNSubstituteIssue.ViewModels; …
Run Code Online (Sandbox Code Playgroud)

c# wpf xaml-designer nsubstitute visual-studio-2013

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