我已经为 EF 通用存储库创建了一个 orderby 表达式,如下 string command = orderByDesc ? "排序依据降序" : "排序依据";
var type = typeof(T);
var property = type.GetProperty(orderby);
var parameter = Expression.Parameter(type, "p");
var propertyAccess = Expression.MakeMemberAccess(parameter, property);
var orderByExpression = Expression.Lambda(propertyAccess, parameter);
var resultExpression = Expression.Call(typeof(Queryable), command, new Type[] { type, property.PropertyType },
items.Expression, Expression.Quote(orderByExpression));
items = items.Provider.CreateQuery<T>(resultExpression);
Run Code Online (Sandbox Code Playgroud)
现在我想创建包含 2 列的表达式用于排序,但无法找到有用的内容。
请帮我创建一个包含 2 列的 orderby 表达式。
Anders Hejlsberg将LINQ描述为语法糖.换句话说,它仍然是C#.只是他们已经添加了一些快捷方式,因此您无需手动编写LINQ为您创建的所有内容.但是C#语言和.NET运行时没有经历任何结构变化.
Razor是一样的吗?
当事物被表达为层时,我不确定它是如何排列的.例如,这是正确的吗?
Razor
^
ASP.NET
^
C#
^
.NET
Run Code Online (Sandbox Code Playgroud)
我认为它是正确的,但我不确定ASP.NET是如何适应的.Razor是ASP.NET正确的,除了它增加了一些语法附加功能还是更多呢?
ASP.NET添加到底是什么?
我用C#编写了一个构建器,用CodeDom编译代码.编译后的.exe必须显示一个MessageBox,但它不会这样做.一切正常,.exe被编译和生成,但输出不起作用(MessageBox没有出现).
这是我的代码:
private void button1_Click(object sender, EventArgs e)
{
String InputCode = String.Empty;
//Unser TestCode, in dem Wir ein MessageBox aufrufen
InputCode = "MessageBox.Show((1 + 2 + 3).ToString());"; //Here is the MSGBox
System.CodeDom.Compiler.CodeDomProvider CodeDomProvider = System.CodeDom.Compiler.CodeDomProvider.CreateProvider("CSharp");
//Parameter für die Compilierung, wie die einzubindenen Bibliotheken usw.
System.CodeDom.Compiler.CompilerParameters CompilerParameters = new System.CodeDom.Compiler.CompilerParameters();
CompilerParameters.ReferencedAssemblies.Add("System.dll");
CompilerParameters.OutputAssembly = "Outpu2t.exe";
CompilerParameters.ReferencedAssemblies.Add("System.Windows.Forms.dll");
CompilerParameters.CompilerOptions += "/target:winexe" + " " + "/win32icon:" + "\"" + textBox6.Text + "\"";
CompilerParameters.GenerateExecutable = true;
CompilerParameters.GenerateInMemory = false;
//Über den StringBuilder wird der …Run Code Online (Sandbox Code Playgroud) 如何在C#4.0中枚举隐藏的文件/目录
基本上我用
var directories = new DirectoryInfo(@"DirectoryName")
.EnumerateDirectories()
.Where(**What is the condition that should go here?**)
Run Code Online (Sandbox Code Playgroud) 我有一个解决方案,包含在visual studio 2012 express中开发的两个项目,并且都针对.net framwork 4.5.
第一个"Dao"项目的目的是从数据库中获取数据.并将这些数据作为dll库提供给第二个项目
第二个项目"UI"的目的是显示来自dll库的数据
当我添加对第二个项目的引用并编写using语句时,我收到以下错误:
找不到类型或命名空间名称'Dao'(使用指令或程序集引用丢失?)
我试图将两个项目的目标更改为.net framework 4.0和.net framework 3.5,但是我得到了同样的错误.
我还添加了这段代码,以确保目标是改变但我得到了:
using System;
using Dao; // error
namespace Ui
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Type.GetType("System.Reflection.ReflectionContext", false) != null);
Console.ReadKey();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能解决问题?谢谢一堆.
有时,当我运行使用代码所做的异步async和await,我发现代码的某些部分甚至没有得到执行.例如,在以下代码中,控制台屏幕上未显示"Sleeping2":
public static void Sleeping(int millis)
{
System.Console.WriteLine("Sleeping1");
System.Threading.Thread.Sleep(millis);
System.Console.WriteLine("Sleeping2");
}
public static async void SleepingAsync(int millis)
{
await System.Threading.Tasks.Task.Run(() => Sleeping(millis));
}
public static async void DoSleepingMain()
{
System.Console.WriteLine("DoSleepingMain1");
SleepingAsync(12000);
System.Console.WriteLine("DoSleepingMain2");
}
public static void Main(string[] args)
{
DoSleepingMain();
}
Run Code Online (Sandbox Code Playgroud)
另一个例子是以下,其中不显示Sleeping1或Sleeping2.我不明白这是因为我await在DoSleepingMain方法中的任务.
public static void Sleeping(int millis)
{
System.Console.WriteLine("Sleeping1");
System.Threading.Thread.Sleep(millis);
System.Console.WriteLine("Sleeping2");
}
public static async Task SleepingAsync(int millis)
{
System.Threading.Tasks.Task.Run(() => Sleeping(millis)); //warning: call not awaited
}
public static async void DoSleepingMain() …Run Code Online (Sandbox Code Playgroud) 我遇到的问题似乎与任务创建有关.在使用循环填充任务数组并在单独的循环中启动它之后,我的结果虽然一致,但却是错误的.但是,如果我单独填充数组,在循环内启动每个任务,一切都很好.任何人都可以给我一些建议吗?
例如,这是有问题的:
int c = 1;
for (int i = 1; i <= 4; i++)
{
taskArray[i-1] = new Task(() => calculateRows(c, true));
c = c + 2;
}
foreach (Task t in taskArray) t.Start();
Run Code Online (Sandbox Code Playgroud)
但这很好用:
taskArray[0] = new Task(() => calculateRows(1, true));
taskArray[1] = new Task(() => calculateRows(3, true));
taskArray[2] = new Task(() => calculateRows(5, true));
taskArray[3] = new Task(() => calculateRows(7, true));
foreach (Task t in taskArray) t.Start();
Run Code Online (Sandbox Code Playgroud) 代码如下.想法是对Last name数组进行排序,并使所有数据相对于姓氏移动,所以这里是示例数据:
Amy Wilson 21 68.5 190 150 10
Scott Wilson 25 76.5 250 210 10
Jamie Scott 45 62 150 135 56
Sharon Baxter 52 65 150 140 8
Brock Stanley 65 70 180 190 4
Baxter Cash 18 72 170 200 8
John Stanford 30 74 190 210 7
Angel Delgado 25 62.5 150 137 5
Brad Harris 55 70 200 180 6
Amber Carrell 18 65 120 110 3
Jakob Neihaus 20 64 110 120 3
Willie …Run Code Online (Sandbox Code Playgroud) 看来,新的"动态"对象让您可以动态创建属性:
dynamic v = new object();
v.x = "a";
v.y = "b";
...
Run Code Online (Sandbox Code Playgroud)
我想知道是否有一种简单的方法以编程方式创建属性.例如,假设我的属性存储在列表中,如下所示:
Tuple<string, string>[] list = new Tuple<string, string>[] {
new Tuple<string, string>("x", "a"),
new Tuple<string, string>("y", "b"),
};
Run Code Online (Sandbox Code Playgroud)
我想迭代这个列表并获得与之前相同的结果.
dynamic v = new object();
foreach (Tuple<string, string> keyValue in list) {
// somehow create a property on v that is named keyValue.Item1 and has a value KeyValue.Item2
}
Run Code Online (Sandbox Code Playgroud)
我想知道这是否可能.
我有一份车辆清单......对于每辆车,我正在做一些移民工作.
foreach (vehicles)
{
1 : Do database table migration for that vehicle
2 : Call an API and save them to database
}
Run Code Online (Sandbox Code Playgroud)
为了提高性能,我将其平行如下:
Parallel.Foreach(vehicles)
{
--same
}
Run Code Online (Sandbox Code Playgroud)
这是正确的方法吗?因为我的理解是,它将为每个请求的车辆创建新的线程,事情应该快速.
并行TASK会改进吗?
保持最大并行数是否好?如果是,如何确定该因素?
c# ×8
.net ×4
asp.net ×1
async-await ×1
c#-5.0 ×1
codedom ×1
dynamic ×1
expression ×1
lambda ×1
performance ×1
razor ×1