我有一个使用大量JavaScript(主要是jQuery)的网站,我需要一个很好的全局方式让用户知道当他们离开特定页面时他们将丢失未保存的更改.
目前,我在输入上放置了一个onchange事件,并将我的主导航包装在一个函数中,该函数将在单击时显示警告.
这感觉非常笨重,并且不能很好地扩展(导航不是主要导航的一部分需要手动包装,这远非理想)
我刚刚有一个巨大的*金发时刻**,但它突出了我对Entity Framework的烦恼.我已经禁用了延迟加载,因此我强迫自己实际考虑我需要哪些数据以尽可能快地保持应用程序.
因此,为了在查询中返回数据,我需要使用该Include方法:
var query = from item in context.Customers
.Include(x=> x.Orders)
select item
Run Code Online (Sandbox Code Playgroud)
这是好的,直到我想在层次结构中更深入地选择一个项目.即:
Customer 1-* Orders *-1 Factory 1-1 Factory Type
Run Code Online (Sandbox Code Playgroud)
据我所知,热切返回所有这些数据的唯一方法是执行以下操作:
var query = from item in context.Customers
.Include("Orders.Factory.FactoryType")
select item
Run Code Online (Sandbox Code Playgroud)
有了上述内容,我无法System.Data.Entity按照我的第一个例子使用Lambdas.有没有人知道我在这里是否遗漏了一些明显的东西,还是我坚持使用字符串声明通过集合导航属性?
如果我没有任何收藏品,我可以写:
.Include(x=> x.Order.OrderType.Factory.FactoryType) // No bother
Run Code Online (Sandbox Code Playgroud)
但是由于Orders收集,就我所知FirstOrDefault,没有办法直接进入儿童财产(SingleOrDefault等等,不起作用).
**这只是一个转折,我碰巧非常喜欢金发*
对于问题的简短表示道歉,但我认为这不需要太多详细说明.
使用CSharpCodeProvider它会导致任何安全隐患,是否可以打开服务器进行攻击?
我有一个简单的方法,从DataReader而不是内置的GetInt32返回Nullable Int32.
我多次称这种方法有一种情况,任何时候我都可以剃掉它会有益.
任何人都可以建议任何替代和更快的方式从DataReader中获取可以为空的Int32吗?
private Int32? GetNullableInt32(SqlDataReader dataReader, int fieldIndex)
{
return !dataReader.IsDBNull(fieldIndex) ?
dataReader.GetInt32(fieldIndex) : (Int32?)null;
}
Run Code Online (Sandbox Code Playgroud) 直到现在我才真正质疑过这个问题.我有一个包含许多字段的输入模型,我想通过输入模型显示属性的字符串名称,以便我的网格可以使用它们:
public class SomeGridRow
{
public string Code { get;set; }
public string Description { get;set; }
public const string Code = "Code";
}
Run Code Online (Sandbox Code Playgroud)
显然,这给出了错误:
'SomeGridRow'类型已经包含'Code'的定义
为什么CLR无法应对两个同名的属性,在我看来,这两个属性是分开的?
string code = gridRow.Code; // Actual member from instantiated class
string codeField = SomeGridRow.Code; // Static/Const
Run Code Online (Sandbox Code Playgroud)
我现在只是Fields在我的输入中使用一个子类,所以我可以使用SomeGridRow.Fields.Code.这有点乱,但它确实有效.
鉴于我有一个IEnumerable<T>,在哪里T有任何对象,我如何从中选择一个特定属性,因为我知道运行时其中一个属性名称的名称是一个字符串?
例如:
var externalIEnumerable = DataPassedFromConsumingCode(); // `IEnumerable<T>`
string knownPropertyName = "Foo";
var fooSelect = externalIEnumerable.Select(...);
Run Code Online (Sandbox Code Playgroud)
本质上,我显然只是在做externalIEnumerable.Select(x=> x.Foo);,但我需要Select在运行时执行此操作,此时我无法控制它最初创建的时间.
-
答案:根据AlanT的回答,这是我实际做的:
public Expression<Func<TItem, object>> SelectExpression<TItem>(string fieldName)
{
var param = Expression.Parameter(typeof(TItem), "item");
var field = Expression.Property(param, fieldName);
return Expression.Lambda<Func<TItem, object>>(field,
new ParameterExpression[] { param });
}
Run Code Online (Sandbox Code Playgroud)
我将它保存为Expression,因为调用Compile导致IQueryable被枚举,这意味着数据库被不必要地命中.所以,要使用它,我只需执行以下操作:
string primaryKey = _map.GetPrimaryKeys(typeof(TOriginator)).Single();
var primaryKeyExpression = SelectExpression<TOriginator>(primaryKey);
var primaryKeyResults = query.Select(primaryKeyExpression).ToList();
Run Code Online (Sandbox Code Playgroud) 有没有办法可以重命名我启动的应用程序的窗口标题栏?即如果我启动了Notepad.exe,我可以将其标题栏从"Untitled - Notepad"重命名为"New Notepad Name".
我有一些代码的例子,我经常在网站上看到我希望改进并希望得到一些帮助.我经常在page_load方法中看到5-10个嵌套的if语句,旨在消除无效的用户输入,但这看起来很难看,难以阅读和维护.
您如何建议清理以下代码示例?我试图消除的主要是嵌套的if语句.
string userid = Request.QueryString["userid"];
if (userid != ""){
user = new user(userid);
if (user != null){
if (user.hasAccess){
//etc.
}
else{
denyAccess(INVALID_ACCESS);
}
}
else{
denyAccess(INVALID_USER);
}
}
else{
denyAccess(INVALID_PARAMETER);
}
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,这很快就会变得非常混乱!在这种情况下,我应该遵循任何模式或做法吗?
我正在开发一个可以读取,写入和导出文件的程序,这些功能都可以正常工作并且几乎已经完善.我现在要做的是能够选择一个文件并告诉它"打开方式"(在Windows XP上的右键单击上下文菜单中)并让我的应用程序能够处理给定的文件.我不知道从哪里开始或在哪里看,所以我想我会在这里问.谢谢.
有没有办法从一个Expression<Func<T>,bool>?拉出属性,运算符和匹配值?给出以下示例:
var customers = GetCustomers();
var customerQuery = customers.Where(x=> x.CustomerID == 1
&& x.CustomerName == "Bob"); // The query is for illustration only
Run Code Online (Sandbox Code Playgroud)
我需要能够得到以下内容:
Property: CustomerID
Operator: Equals
Value: 1
Property: CustomerName
Operator: Equals
Value: Bob
Run Code Online (Sandbox Code Playgroud)
我已经编写了一些可以提取Expression的属性名称的东西,但我似乎无法找到值和运算符的位置,尽管它在Expression的DebugView属性中非常清晰可见.
c# ×7
linq ×2
reflection ×2
c#-4.0 ×1
code-first ×1
coding-style ×1
duck-typing ×1
func ×1
if-statement ×1
javascript ×1
jquery ×1
nullable ×1
performance ×1
process ×1
security ×1
titlebar ×1
window ×1