之前我没有使用过很多lambda表达式,我遇到了一个案例,我认为我可以使用一个.我有一个约19,000条记录的自定义列表,我需要查看列表中是否存在记录,因此不是编写一堆循环或使用linq来查看列表,我决定尝试这样做:
for (int i = MinX; i <= MaxX; ++i)
{
tempY = MinY;
while (tempY <= MaxY)
{
bool exists = myList.Exists(item => item.XCoord == i && item.YCoord == tempY);
++tempY;
}
}
Run Code Online (Sandbox Code Playgroud)
唯一的问题是执行需要大约9到11秒.我做错了什么,这只是我不应该使用这样的表达式的情况?
谢谢.
编辑:抱歉.我应该详细说明.我正在创建一个带有for和while循环的记录列表,并检查myList中是否存在该记录.这是我能想到的唯一方法.我会重新评估它,看看我带来了什么.
有没有人知道如何使用Linq表达式创建.Contains(字符串)函数,甚至创建一个谓词来实现这一点
public static Expression<Func<T, bool>> Or<T>(this Expression<Func<T, bool>> expr1,
Expression<Func<T, bool>> expr2)
{
var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast<Expression>());
return Expression.Lambda<Func<T, bool>>
(Expression.OrElse(expr1.Body, invokedExpr), expr1.Parameters);
}
Run Code Online (Sandbox Code Playgroud)
类似的东西是理想的吗?
我见过的所有C#和VB.Net的重构工具都只考虑了单个visual studio解决方案中的源代码.
无论好坏,我们的大型(许多相关程序)系统都分布在许多解决方案文件中,但是:
所以我正在寻找重构和逆向工程工具,它们将单个文件夹作为输入并对该文件夹下的所有文件执行操作.
(该工具可能需要一些帮助来决定什么是"公共"和"内部"的意思,但大部分的时间"内"是指"在同一代码树"时,"代码树"是一个包含代码和所有子文件夹文件夹.)
现在我很贪婪,我希望这些工具可以创建很多已经完成的重构并能够重放重构.然后我可以尝试理想,如果他们工作,扔掉我的代码,获取最新的代码,你做重构,并在其他人更改文件之前检查代码.(同样,当分支需要合并时)
这可能听起来很愚蠢,但......
当我创建大SQL命令时,我想保持我的代码可读,我这样做:
cmd.CommandText = "SELECT top 10 UserID, UserName " +
"FROM Users " +
"INNER JOIN SomeOtherTable ON xxxxx " +
"WHERE UserID IN (blablabla)";
Run Code Online (Sandbox Code Playgroud)
看到连接?现在,为了保存性能,我现在这样做:
cmd.CommandText = @"SELECT top 10 UserID, UserName
FROM Users
INNER JOIN SomeOtherTable ON xxxxx
WHERE UserID IN (blablabla)";
Run Code Online (Sandbox Code Playgroud)
它使代码可读,但保存了连接.现在它真的能保存任何性能,或者编译器是否足够智能"预连接"第一个字符串?
我们使用TeamCity 5.0使用sln2008构建运行器构建C#解决方案.我们有多个生成exe文件的项目.我们希望使用TeamCity的工件功能来展平所有目录.我们希望所有文件都进入一个没有子文件夹的文件夹,无论它来自哪个文件夹.TeamCity在创建工件时保留目录层次结构.
我们的工件是使用创建的
**\bin\Release\*.*=>PublishedFiles
Run Code Online (Sandbox Code Playgroud)
我们得到的是
我们想要的是什么
编辑
TeamCity 5.1将让我们更接近.
模式
SomeLibrary\bin\Release\*.dll => PublishedFiles
Run Code Online (Sandbox Code Playgroud)
会得到我们
但
**\bin\Release\*.dll => PublishedFiles
Run Code Online (Sandbox Code Playgroud)
仍将保留我们不想要的结构.
目前我们使用MSBuild来展平结构,然后使用TeamCity将其归档.跳过MSBuild部分会很高兴.
我想测试一个呈现具有数据字段值的文本块的应用程序.渲染完成后,我想获得实际的宽度和实际高度.一切正常.当我尝试测试应用程序时,首先出现问题.我无法从测试项目中调用调度程序.
以下是代码.
this.Loaded += (s, e) =>
{
TextBlock textBlock1 = new TextBlock();
//// Text block value is assigned from data base field.
textBlock1.Text = strValueFromDataBaseField;
//// Setting the wrap behavior.
textBlock1.TextWrapping = TextWrapping.WrapWithOverflow;
//// Adding the text block to the layout canvas.
this.layoutCanvas.Children.Add(textBlock1);
this.Dispatcher.BeginInvoke(DispatcherPriority.Background,
(Action)(() =>
{
//// After rendering the text block with the data base field value. Measuring the actual width and height.
this.TextBlockActualWidth = textBlock1.ActualWidth;
this.TextBlockActualHeight = textBlock1.ActualHeight;
//// Other calculations based on the actual widht …Run Code Online (Sandbox Code Playgroud) 它有一个属性:字符串代码和其他10个.
公共代码是字符串列表(string [])汽车列表(Car [])filteredListOfCars是List.
for (int index = 0; index < cars.Length; index++)
{
Car car = cars[index];
if (commonCodes.Contains(car.Code))
{
filteredListOfCars.Add(car);
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,这片方法的时间太长了.
我有大约5万条记录
我怎样才能降低执行时间?
我正在编写一个运行"事物"的应用程序.
想法是数据库包含程序集,方法信息以及参数值.计时器将出现,反映要运行的方法,添加参数然后执行方法.
除参数外,一切都很好.
因此,假设该方法接受CustomerType的ENUM,其中CustomerType具有CustomerType.Master和CustomerType.Associate两个值.
编辑 我不知道将传入的参数类型.ENUM用作示例 END OF EDIT
我们想要运行方法"X"并传入参数"CustomerType.Master".在数据库中,将存在"CustomerType.Master"的varchar条目.
如何将字符串"CustomerType.Master"转换为一般类型为"Master"的CustomerType?
提前致谢,
吉姆
这是我的LINQ查询:
(from o in entities.MyTable
orderby o.MyColumn
select o.MyColumn).Distinct();
Run Code Online (Sandbox Code Playgroud)
结果如下:
{"a", "c", "b", "d"}
Run Code Online (Sandbox Code Playgroud)
这是生成的SQL:
SELECT
[Distinct1].[MyColumn] AS [MyColumn]
FROM ( SELECT DISTINCT
[Extent1].[MyColumn] AS [MyColumn]
FROM [dbo].[MyTable] AS [Extent1]
) AS [Distinct1]
Run Code Online (Sandbox Code Playgroud)
这是一个错误吗?我的订单在哪里,该死的?
我的申请表中有两个表格.我打电话的方式Form 2是这样的:
表格1:
private void btnTest_Click(object sender, EventArgs e)
{
DialogResult result = new System.Windows.Forms.DialogResult();
Add_Link addLink = new Add_Link();
result=addLink.ShowDialog();
if (result == System.Windows.Forms.DialogResult.OK)
{
//
}
}
Run Code Online (Sandbox Code Playgroud)
表格2:
private void btnAdd_Click(object sender, EventArgs e)
{
if(validURL(txtSubLink.Text))
{
HyperLink add = new HyperLink(txtSubLink.Text,txtSubText.Text,"URL");
this.build = add;
}
else
{
MessageBox.Show("Valid URL Needed! " + txtSubLink.Text, "ERROR");
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,如果用户单击该Add按钮,错误消息显示(因为数据无效或文本框为空)但它关闭表单.我只希望用户关闭表单并在两个文本框包含正确的数据时传回数据.如果两个文本框不包含正确的数据或者为空,则当用户单击"添加"时,应显示错误消息,并且Form 2应该保持打开状态,如何实现...?
c# ×7
linq ×2
dispatcher ×1
lambda ×1
nunit ×1
nunit-mocks ×1
performance ×1
refactoring ×1
reflection ×1
sql ×1
teamcity ×1
vb.net ×1
winforms ×1
wpf ×1