从可能不返回任何行的LINQ查询中获取Max值的最佳方法是什么?如果我这样做
Dim x = (From y In context.MyTable _
Where y.MyField = value _
Select y.MyCounter).Max
Run Code Online (Sandbox Code Playgroud)
当查询没有返回任何行时,我收到错误.我可以
Dim x = (From y In context.MyTable _
Where y.MyField = value _
Select y.MyCounter _
Order By MyCounter Descending).FirstOrDefault
Run Code Online (Sandbox Code Playgroud)
但对于这样一个简单的请求,这感觉有点迟钝.我错过了一个更好的方法吗?
更新:这是后面的故事:我正在尝试从子表中检索下一个资格计数器(遗留系统,不要让我开始......).每个患者的第一个资格行总是1,第二个是2,等等(显然这不是子表的主键).因此,我正在为患者选择最大现有计数器值,然后向其中添加1以创建新行.当没有现有子值时,我需要查询返回0(因此添加1会给我一个计数器值1).请注意,我不想依赖子行的原始计数,以防遗留应用程序在计数器值中引入间隙(可能).我试图让这个问题过于通用我不好.
我正在尝试为要附加到RichTextBox的字符串部分着色.我有一个由不同字符串构建的字符串.
string temp = "[" + DateTime.Now.ToShortTimeString() + "] " +
userid + " " + message + Environment.NewLine;
Run Code Online (Sandbox Code Playgroud)
这是消息构建后的样子.
[9:23 pm]网友:我在这里留言.
我希望括号内的所有内容[9:23]都是一种颜色,"用户"是另一种颜色,而消息是另一种颜色.然后我想将字符串附加到我的RichTextBox.
我怎么能做到这一点?
我想在我的主窗体中捕获鼠标移动事件.虽然我能够连接MouseEventHandler主窗体,但当光标位于UserControl或任何其他控件上时,事件不再触发.如何确保始终保持鼠标位置.
我已经编写了一个使用GUI生成SQL查询的工具,我想使用MVVM和WPF重写该工具,每个sql列类型都有不同的控件,如下图所示

我添加了一个基于sql列类型的列过滤器控件,我使用代码生成控件,就像我以前在Windows窗体中一样.
我刚刚安装了Visual Studio 2015更新1,我不能再使用WPF的设计器视图了.它表示发生了未处理的异常.这是堆栈跟踪.:
System.IO.FileLoadException
Could not load file or assembly 'Microsoft.Windows.Design.Interaction, Version=4.3.0.0, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
at System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
at System.Reflection.RuntimeAssembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark& stackMark, …Run Code Online (Sandbox Code Playgroud) 我有一个ListBox它ItemTemplate看起来像这样:
<DataTemplate DataType="local:Column">
<utils:EditableTextBlock x:Name="editableTextBlock" Text="{Binding Name, Mode=TwoWay}"/>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)
Column 是一个简单的类,看起来像这样:
public Column(string name, bool isVisibleInTable)
{
Name = name;
IsVisibleInTable = isVisibleInTable;
}
public string Name { get; set; }
public bool IsVisibleInTable { get; set; }
Run Code Online (Sandbox Code Playgroud)
该EditableTextBlock是UserControl说变成了TextBox双次点击时回百转成TextBlock失落时对焦.它还有一个被称为属性的属性IsInEditMode,默认为false.如果是,TextBox则显示.
问题:
在ItemsSouceListBox的是ObservableCollection<Column>.我有一个按钮,Column可以为集合添加新的内容.但我的问题是,我希望通过该ButtonIsInEditMode为新添加的EditableTextBlocks 变为真.但我只能在ViewModel中访问.我如何访问集合中指定的? ColumnEditableTextBlockColumnItemsSource
我能想出的唯一解决方案是从中派生一个类Column并为其添加一个属性(例如:name:IsInEditMode)(或者也许是一个包装类.这里是一个类似的答案,建议使用包装类)并绑定到该属性DataTemplate如下: …
我需要unsafe用C#编写一个方法,显然“在安全上下文中不能使用不安全的构造”。我去了项目属性,并看到了一个允许在Debug和Release版本中使用不安全代码的开关。
但是,它不可单击。
如何为我的项目允许使用不安全的代码?
编辑:添加<AllowUnsafeBlocks>true</AllowUnsafeBlocks>到PropertyGroup标签中的csproj文件不解决这个问题,但我不知道是否有一种方法在IDE本身要做到这一点,因为我期望的IDE能够做到这些类的东西。
这是我遇到的一个问题,但都失败了
假设说
string str = "wordcounter";
Run Code Online (Sandbox Code Playgroud)
人们可以很容易地找到长度使用 str.Length
然而,在C#中有可能得到的字母数,而无需使用任何一样内置的功能Length,SubStr等等
我有一个带有async处理程序的按钮,该处理程序在异步方法上调用awaits。看起来是这样的:
private async void Button1_OnClick(object sender, RoutedEventArgs e)
{
await IpChangedReactor.UpdateIps();
}
Run Code Online (Sandbox Code Playgroud)
这里是如何IpChangedReactor.UpdateIps()的外观:
public async Task UpdateIps()
{
await UpdateCurrentIp();
await UpdateUserIps();
}
Run Code Online (Sandbox Code Playgroud)
一直到异步。
现在,我有一个在其tick事件中DispatcherTimer反复调用的await IpChangedReactor.UpdateIps。
假设我点击了按钮。现在事件处理程序正在等待UpdateIps并返回到调用方,这意味着WPF将继续执行其他操作。同时,如果计时器触发,它将再次调用UpdateIps,现在这两种方法将同时运行。因此,我看到的方式类似于使用2个线程。比赛条件会发生吗?(我的一部分人说不,因为它们都在同一线程中运行。但是这很令人困惑)
我知道异步方法不一定在单独的线程上运行。但是,在这种情况下,这非常令人困惑。
如果我在这里使用同步方法,它将按预期工作。计时器滴答事件将仅在第一个呼叫完成后运行。
有人可以启发我吗?
让 exp = [1,2,3,4,5]
如果我然后执行x in exp,它会给我False.但是如果我执行:
for x in exp:
if x==3:
print('True')
Run Code Online (Sandbox Code Playgroud)
然后执行x in exp,它返回True.这里发生了什么事?我没有给x分配任何东西.我有吗?我真的很困惑.
**编辑:**对不起,如果我之前没有说过:x之前没有定义.
谢谢大家.我现在明白了.的元素exp被分配给x作为exp被遍历.并且在最后一行代码中x in exp等于True,因为最后一个元素已被分配给x.
c# ×8
wpf ×4
.net ×2
mvvm ×2
string ×2
winforms ×2
async-await ×1
colors ×1
contains ×1
datatemplate ×1
for-loop ×1
linq ×1
linq-to-sql ×1
listbox ×1
membership ×1
python ×1
richtextbox ×1
rider ×1
sequence ×1
unsafe ×1
xaml ×1