小编Equ*_*lsk的帖子

为什么Entity Framework尝试SELECT所有列,即使我只指定了两个?

我继承了一个ASP MVC项目,该项目使用Entity Framework 6.1.3与Dynamics CRM 2011 SQL数据库进行交互.

我正在使用此查询尝试获取所有具有帐号的活动帐户,并且我只选择两列为匿名类型:

var results = context.Accounts
              .Where(a => (a.AccountNumber != null) 
                       && (a.StateCode == (int)AccountState.Active))
              .Select(a => new 
              { 
                  a.AccountId, 
                  a.AccountNumber 
              });
Run Code Online (Sandbox Code Playgroud)

(contextDbContext,Accounts是,是DbSet<Account>,Account已定义所有字段,包括自项目创建以来删除的字段.这些字段由EF生成.)

执行查询时,我得到以下异常:

列名称"Opportunity_1","Opportunity_2",...,"Opportunity_7"无效

提到的所有列都是自创建此项目以来已从数据库中删除的列.

发生此错误是因为EF运行的SQL查询实际上如下所示:

SELECT     
    [Extent1].[StateCode] AS [StateCode],     
    [Extent1].[AccountId] AS [AccountId],     
    [Extent1].[AccountNumber] AS [AccountNumber]   

FROM (SELECT     
        [Account].[AccountId] AS [AccountId],     
        [Account].[AccountNumber] AS [AccountNumber],     
        ...
        !! EVERY SINGLE COLUMN !!
        ...
        [Account].[Opportunity_1] AS [Opportunity_1], // These have been deleted
        [Account].[Opportunity_2] AS [Opportunity_2]  // …
Run Code Online (Sandbox Code Playgroud)

c# sql-server asp.net-mvc entity-framework

12
推荐指数
1
解决办法
989
查看次数

如何使用Directory.EnumerateFiles,不包括隐藏文件和系统文件

我正在枚举目录中的所有文件,以便稍后处理它们.我想排除隐藏和系统文件.

这是我到目前为止:

IEnumerable<IGrouping<string, string>> files;

files = Directory.EnumerateFiles(sourcePath, "*", SearchOption.AllDirectories)
       .Where(f => (new FileInfo(f).Attributes & FileAttributes.Hidden & FileAttributes.System) == 0)
       .GroupBy(Path.GetDirectoryName);
Run Code Online (Sandbox Code Playgroud)

但是,如果我查看结果,我仍然会隐藏并包含系统文件:

foreach (var folder in files)
{
    foreach (var file in folder)
    {
        // value for file here still shows hidden/system file paths
    }
}
Run Code Online (Sandbox Code Playgroud)

我发现这个问题与杰罗姆有类似的例子,但我甚至无法编译.

我究竟做错了什么?

c# ienumerable fileinfo

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

为什么我的菜单从右到左而不是从左到右?

我来自WinForms并且第一次自学WPF.
我以为我会首先在WPF中重新创建我的一个WinForms应用程序的界面,但我已经遇到了菜单问题.

我无法弄清楚为什么WPF应用程序中的菜单从右到左打开,当WinForms应用程序上的菜单从左到右打开时(这就是我想要的):

在此输入图像描述

这是一个几乎没有默认设置的空白项目.这是XAML:

<Window x:Class="WpfTest.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Test" Height="541.771" Width="828.947" WindowStartupLocation="CenterScreen">
    <DockPanel LastChildFill="False" Margin="0" Background="#FFFDFD9C">
        <Menu x:Name="menu" Height="22" VerticalAlignment="Top" RenderTransformOrigin="1.79,0.076" DockPanel.Dock="Top" Margin="0">
            <MenuItem Header="File">
                <MenuItem Header="New Document"/>
                <MenuItem Header="Open Template"/>
                <MenuItem Header="Open Collateral"/>
                <Separator/>
                <MenuItem Header="Synchronise"/>
                <Separator/>
                <MenuItem Header="Build Document"/>
                <MenuItem Header="Document History">
                    <MenuItem Header="Load Last Document"/>
                </MenuItem>
                <Separator/>
                <MenuItem Header="Settings"/>
                <Separator/>
                <MenuItem Header="Exit"/>
            </MenuItem>
            <MenuItem Header="Help">
                <MenuItem Header="User Guide"/>
                <MenuItem Header="About"/>
            </MenuItem>
        </Menu>
        <Rectangle Fill="#FFB8B8FF" Height="80" VerticalAlignment="Top" DockPanel.Dock="Top" Margin="0"/>
    </DockPanel>
</Window>
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

wpf

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

JSON.NET在完成反序列化对象后抛出了在JSON字符串中找到的附加文本."

我有一个Javascript控件,它将JSON字符串作为AJAX返回给服务器.但是当我试图保存时,Newtonsoft正在抛出异常

完成反序列化对象后在JSON字符串中找到的附加文本.

我尝试构建一个非常简单的JSON,如下所示抛出此异常

[{
    "TopicName": "Hello World",
    "OrdinalOrder": 0
}, {
    "TopicName": "Hello World",
    "OrdinalOrder": 0
}, {
    "TopicName": "Hello World",
    "OrdinalOrder": 0
}, {
    "TopicName": "Hello World",
    "OrdinalOrder": 0
}, {
    "TopicName": "Hello World",
    "OrdinalOrder": 0
}, {
    "TopicName": "Hello World",
    "OrdinalOrder": 0
}, {
    "TopicName": "Hello World",
    "OrdinalOrder": 0
}, {
    "TopicName": "Hello World",
    "OrdinalOrder": 0
}, {
    "TopicName": "Hello World",
    "OrdinalOrder": 0
}, {
    "TopicName": "Hello World",
    "OrdinalOrder": 0
}, {
    "TopicName": "Hello World",
    "OrdinalOrder": 0
}, …
Run Code Online (Sandbox Code Playgroud)

javascript c# json json.net

6
推荐指数
2
解决办法
7334
查看次数

使 MouseWheel 事件从子级传递到父级

我有一个Panel地方AutoScroll是真实的。该面板包含许多较小的面板,它们像瓷砖一样填充所有可用空间。当有太多子面板需要显示时,我会按预期获得垂直滚动条。
每个“图块”都绑定了一些事件处理程序来处理 MouseDown / MouseUp / MouseMove,因为它们可以拖动。

我遇到的问题是鼠标滚轮滚动在父面板上不起作用,因为它没有焦点。我无法给它焦点,因为很可能我会在移动具有焦点的子面板时滚动,即使如此,也需要解决方法,因为面板不喜欢焦点。

我一直在尝试(但失败了)找到一种仅将鼠标滚轮事件从子级传播到父级的方法。
我读过,在 Winforms 中,如果一个控件无法处理鼠标事件,它会将其冒泡到该控件的父级,然后到该控件的父级,依此类推,直到找到合适的处理程序。
考虑到这一点,我认为最好的解决方案是用于WndProc覆盖子面板上的所有滚动相关事件,并将它们传递给父级,同时保持所有其他事件完好无损,但不可否认,这不是我的强项,我迷路了。

我尝试了一些其他解决方案,例如使子面板对所有鼠标事件不可见,但正如您可能已经猜到的那样,这很糟糕。我读过有关实现消息过滤器的信息,但不理解它。

下面的代码将为您提供面板及其子面板的非常基本的示例:

private void Form1_Load(object sender, EventArgs e)
{
    Height = 600;
    Width = 300;

    Color[] colors = new Color[]{ Color.PowderBlue, Color.PeachPuff };

    Panel panel = new Panel()
    {
        Height = this.ClientSize.Height - 20,
        Width = 200,
        Top = 10,
        Left = 10,
        BackColor = Color.White,
        BorderStyle = BorderStyle.FixedSingle,
        AutoScroll = true
    };

    for (int i = 0; i < 10; …
Run Code Online (Sandbox Code Playgroud)

c# winforms

5
推荐指数
2
解决办法
4160
查看次数

当指定条件!= null时,Automapper不会正确映射null List成员

当我尝试映射对象的空列表(成员)时出现问题,考虑到我指定:

.ForAllMembers(opts => opts.Condition((src, dest, srcMember) =>
    srcMember != null
));
cfg.AllowNullCollections = true; // didn't help also
Run Code Online (Sandbox Code Playgroud)

代码中的简短示例:

gi.PersonList = new List<Person>();
gi.PersonList.Add(new Person { Num = 1, Name = "John", Surname = "Scott" });
GeneralInfo gi2 = new GeneralInfo();
gi2.Qty = 3;

Mapper.Map<GeneralInfo, GeneralInfo>(gi2, gi);
Run Code Online (Sandbox Code Playgroud)

gi.PersonList.Count = 0,如何解决?

using System;
using System.Collections.Generic;
using AutoMapper;

public class Program
{
   public static void Main(string[] args)
    {
        Mapper.Initialize(cfg =>
        {
            cfg.AllowNullCollections = true;
            cfg.CreateMap<GeneralInfo, GeneralInfo>()
            .ForAllMembers(opts => opts.Condition((src, dest, srcMember) …
Run Code Online (Sandbox Code Playgroud)

c# automapper mapper automapper-6

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

如何将List <T>拆分为两个列表,一个包含所有重复值,另一个包含其余值?

我有一个帐户的基本类(为简洁起见,删除了其他属性):

public class Account
{
    public string Email { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我有List<T>这些帐户.

我可以轻松删除基于电子邮件地址的重复项:

var uniques = list.GroupBy(x => x.Email).Select(x => x.First()).ToList();
Run Code Online (Sandbox Code Playgroud)

名为"uniques"的列表现在只包含基于电子邮件地址的每个帐户中的一个,任何重复项都被丢弃.

我想做一些不同的事情并将列表分成两部分.
一个列表仅包含"true"唯一值,另一个列表将包含所有重复值.

例如,以下帐户电子邮件列表:

unique@email.com
dupe@email.com
dupe@email.com

将分为两个列表:

独特的
unique@email.com

重复
dupe@email.com
dupe@email.com

我已经能够通过使用顶部的示例创建唯一值列表来实现此目的.然后我.Except()在原始列表上使用以获得重复的差异.最后,我可以遍历每个副本,将其"弹出"到唯一列表中,然后将其移动到重复列表中.

这是一个关于.NET Fiddle的工作示例

我可以用更有效或语法含糖的方式拆分列表吗?

如果有必要,我很乐意使用第三方库,但我宁愿坚持纯粹的LINQ.
我知道CodeReview,但觉得问题也适合这里.

c# linq list duplicates

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

为什么在使用Polly的后续重试期间HttpClient会继续失败?

我有几种方法需要某种互联网连接.如果连接失败,我想在失败前重试该方法一段时间.由于应用程序可以在等待成功响应时愉快地继续运行,因此我希望异步执行此操作.

我正在使用Polly(5.3.1)来实现异步重试逻辑杠杆Tasks.

我正在通过禁用Wi-Fi启动该过程并在重试窗口期间启用它来模拟断开连接.我希望在再次启用我的连接之后,该方法在重试时会成功,我所看到的是该方法继续抛出一个HttpRequestException好像连接已关闭,直到重试完成,此时它将抛出给调用者.
如果我正常启用Wi-Fi启动方法,它会立即成功.

// Get the HTML of a web page 'async'
public async Task<string> GetHtmlAsync(string url)
{
    using (var client = new HttpClient())
    using (var response = await client.GetAsync(url))
    {
        response.EnsureSuccessStatusCode();
        using (var content = response.Content)
        {
            return await content.ReadAsStringAsync();
        }
    }
}

// Wrapper for Polly to create an async retry policy
public async Task<TResult> RetryAsync<TResult, TException>(Task<TResult> task, int retries, int seconds) where TException : Exception
{
    return await Policy
               .Handle<TException>() …
Run Code Online (Sandbox Code Playgroud)

c# asynchronous task-parallel-library polly

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

根据CASE,有条件地从3个表之间的LEFT JOIN返回值

首先,为长篇大论道歉.它看起来真的比它看起来更简单;-)

我正在尝试做一些我认为在概念上很简单的事情,而且我相信我已经完成了大部分工作,但最后一部分是我无法实现而没有错误,我无法弄清楚如何修复.

我有三个相关的表.

订单:
每一行都是一个具有唯一ID的订单,永远不会有重复.

+---------+---------+
| OrderID | Name    |
+---------+---------+
| 1       | Order 1 |
| 2       | Order 2 |
| 3       | Order 3 |
+---------+---------+
Run Code Online (Sandbox Code Playgroud)

订单明细:
关系表,其中每一行都是订单上的产品系列.

+---------+-----------+
| OrderID | ProductID |
+---------+-----------+
| 1       | a         |
| 2       | b         |
| 2       | c         |
| 3       | a         |
| 3       | b         |
| 3       | b         |
+---------+-----------+
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,有些订单只有一个产品(1),有些产品会有多个产品(2),有些产品会有重复的产品(3).

产品
每一行都是具有唯一ID的产品,永远不会有重复.

+-----------+-------------+
| ProductID | Description …
Run Code Online (Sandbox Code Playgroud)

sql case left-join sql-server-2008

3
推荐指数
1
解决办法
62
查看次数

使用 st、nd、rd、th 设置日期时间日期格式

我正在 SSRS 中创建一个报告,顶部有一个标题,其中包含“上次刷新”占位符,它将显示报告上次运行的时间。

我在占位符中的功能很简单:

=Format(Now, "dddd dd MMMM yyyy hh:mm tt")
Run Code Online (Sandbox Code Playgroud)

看起来像这样:

2015 年 9 月 22 日星期一 09:46

我想用英文后缀 st、nd、rd 和 th 适当地格式化日期值。

我找不到用于此目的的内置函数,并且到目前为止我所查看的指南似乎描述了如何在 SQL 端使用我不想要的存储过程来执行此操作。我正在寻找报告端解决方案

我以为我可以摆脱一个丑陋的嵌套IIF,但它出错了,尽管没有给我任何语法错误(空格只是为了可读性)。

=Format(Now, "dddd " + 

IIF(DAY(Now) = "1", "1st", 
IIF(DAY(Now) = "21","21st",
IIF(DAY(Now) = "31","31st",
IIF(DAY(Now) = "2","2nd",
IIF(DAY(Now) = "22","22nd",
IIF(DAY(Now) = "3","3rd",
IIF(DAY(Now) = "23","23rd",
DAY(Now) + "th"))))))) 

+ " MMMM yyyy hh:mm tt")
Run Code Online (Sandbox Code Playgroud)

在任何其他语言中,我很久以前就已经解决了这个问题,但 SSRS 对我来说是新的,所以我不确定如何进行简单的字符串操作。令人沮丧!

感谢您给我的任何帮助或指示。

编辑:我读过有关将 VB 代码插入报告中的内容,这可以解决我的问题,但我一定要疯了,因为我看不到在哪里添加它。指南说要进入“属性”>“代码”部分,但我看不到。

format datetime reporting-services ssrs-2008

3
推荐指数
1
解决办法
8217
查看次数