我正在使用LINQ to SQL来处理我正在处理的应用程序的数据库查询.
出于这个例子的目的,假设我有一些像这样的表
- Company
- Product
- Item
- Order
Run Code Online (Sandbox Code Playgroud)
并且假设a Company有0或更多Products,a Product有0或更多Items,a Item有0或更多Orders.
现在让我这样获得一个列表Orders,例如:
IQueryable<Order> myOrders = GetMyOrders();
Run Code Online (Sandbox Code Playgroud)
现在让我说我想查询一个特定的订单Company.Name,但是有一个情况,每个表的父ID都可以NULL(我知道这对我的示例数据来说似乎不合逻辑,但它只是一个例子)
假设没有NULL父ID我可以这样做:
var filteredOrders = myOrders.Where(x => x.Item.Product.Company.Name == "Company1");
Run Code Online (Sandbox Code Playgroud)
这样可以正常工作,因为可能有NULL父ID值,我需要检查每个父对象以确保它不是null在查询下一个父对象之前(否则我将得到一个异常).所以我做了类似的事情:
var filteredOrders = myOrders.Where(x =>
x.Item != null &&
x.Item.Product != null &&
x.Item.Product.Company != null &&
x.Item.Product.Company.Name == "Company1");
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:除了必须包含所有空检查之外,还有更好的方法(在可读性和编码的简易性方面)吗?在此过程中发现的任何空父项都应导致从结果列表中排除.
请不要阻止空父母的建议,数据库不会改变(无论如何都是完全有效的)
考虑以下数组,声称代表了二叉树:
[1,2,5,6,-1,8,11]
鉴于值为-1的索引表示根元素,我在下面的问题:
a)这实际上是如何表示的?
我们应该遵循以下公式(来自此链接的来源)来找出树吗?三个简单的公式允许您从父项的索引转到其子项的索引,反之亦然:
* if index(parent) = N, index(left child) = 2*N+1
* if index(parent) = N, index(right child) = 2*N+2
* if index(child) = N, index(parent) = (N-1)/2 (integer division with truncation)
Run Code Online (Sandbox Code Playgroud)
如果我们使用上面的公式,那么index(root)= 3,index(left child)= 7,它不存在.
b)知道它是否是完整的二叉树是否重要?
我有一个用于测试目的的C#.Net 4.0控制台应用程序(使用VS 2012).我的目标是能够创建一个可以在MS SQL Server数据库和SQLite数据库上使用的单个Entity Framework .edmx文件.基本上,我想使用相同的实体模型类和集合进行查询,但很容易就能随意在两个不同的数据库之间切换.
到目前为止,我已经通过连接到MS Server数据库并添加我的单个测试表(称为Contact)创建了我的.edmx文件.有了这个,我可以使用以下代码从我的表中获取数据:
var db = new DataAccess.ContactTestEntities();
foreach (var contact in db.Contacts)
Console.WriteLine("" + contact.ID + ". " + contact.FirstName + " " + contact.LastName);
Run Code Online (Sandbox Code Playgroud)
现在,我希望能够使用相同的代码,而是连接到SQLite数据库.我编写了一个部分类,允许我更改contruction上的连接字符串,如下所示:
var db = new DataAccess.ContactTestEntities("MY SQLITE CONNECTION STRING");
Run Code Online (Sandbox Code Playgroud)
它在这方面工作正常,除了在尝试查询数据库时我收到此错误:
无法将类型为"System.Data.SQLite.SQLiteConnection"的对象强制转换为"System.Data.SqlClient.SqlConnection".
我试图找到一个解决方案,但已经走到了尽头,我正在努力寻找下一步.
这就是我的问题:我怎样才能解决这个问题?或者我可以采取另一种方法来获得相同的预期结果?
堆栈跟踪以上异常:
处于System.Data.Ents.Clmand.AntityClient.EntityCommandDefinition.ExecuteStoreCommands的System.Data.Common.Utils.CommandHelper.SetStoreProviderCommandState(EntityCommand entityCommand,EntityTransaction entityTransaction,DbCommand storeProviderCommand)中的System.Data.SqlClient.SqlCommand.set_DbConnection(DbConnection值)(EntityCommand entityCommand,的CommandBehavior行为)在System.Data.Objects.Internal.ObjectQueryExecutionPlan.Execute [TResultType](ObjectContext的上下文中,ObjectParameterCollection的parameterValues)在System.Data.Objects.ObjectQuery
1.GetResults(Nullable1 forMergeOption)在System.Data.Objects.ObjectQuery1.System.Collections.Generic.IEnumerable<T>.GetEnumerator() at System.Data.Entity.Internal.Linq.InternalQuery1.GetEnumerator()
在System.Data.Entity.Internal.Linq.InternalSet1.GetEnumerator()1.System.Collections.Generic.IEnumerable.GetEnumerator()在SQLiteTest.Program.ReadFromSqlite()在C:\开发\项目\测试应用程序\ SQLiteTest\SQLiteTest \的Program.cs:行82 SQLiteTest.Program.ReadTests()在C:\开发\项目\测试应用程序\ SQLiteTest\SQLiteTest \的Program.cs:行63 SQLiteTest.Program.ProcessMenu()在C:\开发\项目\测试应用程序\ SQLiteTest\SQLiteTest \的Program.cs:行36在SQLiteTest.Program.Main(字串[] args)在C:\发展\项目\测试应用\ SQLiteTest\SQLiteTest\Program.cs的:在System.AppDomain._nExecuteAssembly线14(RuntimeAssembly组件,字串[] args)在微软.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Data.Entity.Infrastructure.DbQuery
在System.Threading.ExecutionContext.RunInternal(的ExecutionContext的ExecutionContext,ContextCallback回调,对象的状态,布尔preserveSyncCtx)在System.Threading.ExecutionContext.Run(的ExecutionContext的ExecutionContext,ContextCallback回调,对象的状态,布尔preserveSyncCtx)在System.Threading.ExecutionContext.Run System.Threading.ThreadHelper.ThreadStart()中的(ExecutionContext executionContext,ContextCallback回调,对象状态)
我不确定我的确切问题,但情况如下:
我有一个应用程序(WinForms,C#.Net),我在Visual Studio 2012中开发.它做了很多事情,但重要的是它需要从某个位置读取文件.
在这种情况下,文件的位置在服务器上,我的机器具有用于访问文件的映射网络驱动器设置.我可以使用Windows资源管理器手动导航到文件.
我的代码中有以下行突出显示问题:
System.IO.File.Exists("X:\\A Folder\\a_file.txt");
Run Code Online (Sandbox Code Playgroud)
该文件确实存在于该位置.但是,这就是出现问题的地方:如果我构建解决方案并直接从"bin"文件夹运行.exe(双击).代码很好,它找到了文件.但是,如果我使用visual studio运行它,那么我会得到一个"找不到文件"的例外.
我认为Visual Studio以"管理员"模式运行(我忘记了为什么我需要这个,但我这样做).现在,如果您认为"管理员"帐户没有映射"X:\"驱动器,这是有道理的.但是,在我上周升级到Windows 10之前,这一直不是问题.
所以我的问题是:
Visual Studio Administrator模式在Windows 10中的工作方式是否有所不同?在这种情况下,它是否以不同方式处理映射的网络驱
值得注意的是我从Windows 7升级,因此无法确认此问题是否也出现在8和8.1中.
在任何人问之前,让我们说它必须是一个映射驱动器.不允许UNC路径!
我有这样的div:
<div id="popupDiv1" class="popupDivClass">
<a id="popupDivClose" class="popupCloseClass">x</a>
</div>
Run Code Online (Sandbox Code Playgroud)
当我点击'x'时(我想运行一个jquery函数disablePopup(id);,其中id是相应的popupDiv的id)(我有很多popupDiv,每个都有它自己的X按钮.
为了做到这一点,我实现了以下内容
$(".popupCloseClass").click(function (event) {
var buttonID = $(event.target).attr("id");
var id = $( buttonID).closest("div").attr("id");
disablePopup(id);
});
Run Code Online (Sandbox Code Playgroud)
基本上我得到了popupCloseClass的id,然后我通过最接近的方法得到它的id(相应的popupDiv)的id.然后我调用disablePopup.
但这不起作用.
我甚至尝试使用该var buttonID = $(buttonID).parent().attr("id");方法,但也没有工作.
我也试过了 var id = this.id;
任何帮助是极大的赞赏
谢谢
一般问题
该应用程序是C#WinForms .Net 4.0.
我有一个SplitContainer占据大部分形式的东西,它被设置为各个方向的锚点,所以它与表格一起重新调整大小.左侧面板(Panel1)有一个简单的菜单,这里没有问题.右侧面板(Panel2)更复杂,包含许多嵌套的选项卡控件(包含大量控件) - 它非常复杂,但并没有改变.
问题是重新调整表单大小不是很好.事实上,如果您通过缓慢拖动边缘来调整大小然后它可以正常工作,但快速拖动或使用"恢复"按钮(窗体的右上角)然后问题发生.
我的控制层次结构
以下是我的控件层次结构的一个简单示例,它绝对是一个缩减版本,但突出显示嵌套的选项卡控件,它可能有助于复制:
调试细节
经过一些调试后,看起来它实际上是Panel2(拆分容器的子代)没有正确调整大小,实际SplitContainer本身调整得很好.
以下是显示此信息的调试值...
全尺寸表格,在调整大小之前:
splitContainerMain.Width: 1479
splitContainerMain.Panel2.Width: 1206
panelCenter.Width: 1203
tabControlMain.Width: 1215
Run Code Online (Sandbox Code Playgroud)
如预期的那样,splitContainerMain.Panel2.Width小于splitContainerMain.Width.
调整问题后调整大小:
splitContainerMain.Width: 815
splitContainerMain.Panel2.Width: 1206
panelCenter.Width: 1203
tabControlMain.Width: 1215
Run Code Online (Sandbox Code Playgroud)
可以看出,splitContainerMain.Width已根据需要重新调整大小,但splitContainerMain.Panel2.Width其后的孩子却没有.
注意:请记住,如果我手动调整窗体大小,宽度会正确更新 - 这不是我没有正确设置任何锚点的问题.
我的努力到目前为止
我想知道问题是否与此问题有关,但我不准备创建一个新的"MySplitContainer"来尝试解决这个问题.
我试图做的是使用各种Form resize事件并尝试手动设置宽度,但无济于事.我想我想尝试的是Panel2.Width在某种事件中设置值.
我在寻找什么
splitContainerMain.Panel2.Width在splitContainerMain尺寸变化时正确调整大小?Panel2.Width应该是什么?如何从Form.Resize …我知道之前可能已经提出这个问题,但我似乎找不到合适的答案.
我有一个名为foobar.exe的Windows服务.我在同一文件夹中有一个名为foobar.exe.config的应用程序配置文件.
配置文件是否仅在启动时读取?
我想更改配置文件而不必重新启动服务,但这是我可以读取新设置的唯一方法.
我究竟做错了什么?
Windows服务可以有动态配置文件吗?
我有一个简单的ASP.Net MVC 3应用程序,它有一些控制器和一些很好的操作.
现在,由于这是基于用户的应用程序,因此大多数控制器操作都需要对用户进行身份验证.MVC使用内置的Authorize属性处理这个问题,您可以使用该属性单独装饰控制器和/或操作.
最棒的是你可以将属性应用于控制器,并且给定控制器的所有操作也将应用它 - 保存了大量的输入;)
但我有一个控制器,比方说,10个动作.但我希望其中一个操作没有应用Authorize属性.
是的,我可以将该属性应用于其他9并将其从控制器中删除,这将完全符合我的需要.但有没有办法让它应用于控制器,只是选择排除其中一个动作?
实际上,会想要......
[!Authorize] 要么 [NotAuthorize]
我知道我可以创建一个可以完成这项工作的自定义工具,但我想知道的是,是否有内置方法可以做到这一点?或者我是否必须将该属性应用于所有其他9个其他操作?
C#中有没有办法在代码中禁用关键字的功能?在我的情况下,我想将我的一个枚举项定义为浮动,这显然使Visual Studio有点混乱:)
public enum ValidationType
{
email,
number,
float,
range
}
Run Code Online (Sandbox Code Playgroud) {"Title":"Chatroom","Year":"2010","Rated":"R","Released":"11 Aug 2010","Genre":"Drama, Thriller","Director":"Hideo Nakata","Writer":"Enda Walsh, Enda Walsh","Actors":"Aaron Johnson, Imogen Poots, Matthew Beard, Hannah Murray","Plot":"A group of teenagers encourage each other's bad behavior.","Poster":"http://ia.media-imdb.com/images/M/MV5BMjE0MjM5MDM2MF5BMl5BanBnXkFtZTcwMzg1MzY0Mw@@._V1._SX320.jpg","Runtime":"1 hr 37 mins","Rating":"5.3","Votes":"1000","ID":"tt1319704","Response":"True"}
Run Code Online (Sandbox Code Playgroud)
我用nsstring得到这个数据,我的问题是如何分割数据,分离到另一个nsstrings,但我想做逗号这么多nsstrings
c# ×4
.net ×1
asp.net ×1
asp.net-mvc ×1
attributes ×1
binary-tree ×1
enums ×1
html ×1
jquery ×1
keyword ×1
linq ×1
linq-to-sql ×1
nsstring ×1
parent ×1
split ×1
sql-server ×1
sqlite ×1
windows-10 ×1
winforms ×1
xcode ×1