我继承了一个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)
(context是DbContext,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) 我正在枚举目录中的所有文件,以便稍后处理它们.我想排除隐藏和系统文件.
这是我到目前为止:
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)
我发现这个问题与杰罗姆有类似的例子,但我甚至无法编译.
我究竟做错了什么?
我来自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)
我错过了什么?
我有一个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) 我有一个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) 当我尝试映射对象的空列表(成员)时出现问题,考虑到我指定:
.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) 我有一个帐户的基本类(为简洁起见,删除了其他属性):
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()在原始列表上使用以获得重复的差异.最后,我可以遍历每个副本,将其"弹出"到唯一列表中,然后将其移动到重复列表中.
我可以用更有效或语法含糖的方式拆分列表吗?
如果有必要,我很乐意使用第三方库,但我宁愿坚持纯粹的LINQ.
我知道CodeReview,但觉得问题也适合这里.
我有几种方法需要某种互联网连接.如果连接失败,我想在失败前重试该方法一段时间.由于应用程序可以在等待成功响应时愉快地继续运行,因此我希望异步执行此操作.
我正在使用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) 首先,为长篇大论道歉.它看起来真的比它看起来更简单;-)
我正在尝试做一些我认为在概念上很简单的事情,而且我相信我已经完成了大部分工作,但最后一部分是我无法实现而没有错误,我无法弄清楚如何修复.
我有三个相关的表.
订单:
每一行都是一个具有唯一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) 我正在 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 代码插入报告中的内容,这可以解决我的问题,但我一定要疯了,因为我看不到在哪里添加它。指南说要进入“属性”>“代码”部分,但我看不到。
c# ×7
asp.net-mvc ×1
asynchronous ×1
automapper ×1
automapper-6 ×1
case ×1
datetime ×1
duplicates ×1
fileinfo ×1
format ×1
ienumerable ×1
javascript ×1
json ×1
json.net ×1
left-join ×1
linq ×1
list ×1
mapper ×1
polly ×1
sql ×1
sql-server ×1
ssrs-2008 ×1
winforms ×1
wpf ×1