在我的C#程序中,我遇到了一个障碍,我有一个存储日期范围的表(列是日期范围ID(int),开始日期(DateTime)和结束日期(DateTime).我想查询表并返回只属于特定日期范围的行.我不能使用datetime.date,因为它包含年份.
例如,我想查询表并获取介于01-01和5-31之间的所有日期范围.
我已经尝试使用以下lambda来查询表,但我的结果集是空的.
List<DateRanges> tempDateRangeList = dataContext
.DateRanges
.Where(r=>r.BeginDate.Month <= startDate.Month
&& r.EndDate.Month >= finishDate.Month)
.ToList();
tempDateRangeList = tempDateRangeList.Where(r=>r.BeginDate.Day <= startDate.Day
&& r.EndDate.Day >= finishDate.Day)
.ToList();
Run Code Online (Sandbox Code Playgroud)
有没有人对我如何做到这一点有任何建议?
编辑:
BeginDate和EndDate的示例将是如下列表:
BeginDate 2016年1月1日,2016年5月25日,2016年11月9日
EndDates 2016年5月24日,2016年9月9日,2016年12月31日
过滤日期为:startDate = 12/8 finishDate = 12/12
预期结果:9/11开始日期结束日期12/31
我在许多程序上执行技术支持和一些开发,这些程序使用QuickBooks SDK来执行各种功能.最近我注意到当用户执行以下操作时:
先决条件: - QuickBooks未在桌面上打开,并且当前未运行. - 我的桌面程序未在QuickBooks集成应用程序列表中设置以自动登录.
1)打开我的一个程序.
2)执行启动与QuickBooks的连接和会话的操作.
3)QuickBooks界面返回一个错误,指出您必须打开QuickBooks并登录到公司文件才能执行此操作.
4)我的程序关闭会话和连接,然后向用户显示一些对话框,为他们提供故障排除提示.
结果:
QuickBooks本身继续作为QBW32.exe在后台运行,即使会话和连接都已关闭.
如果用户然后尝试打开QuickBooks桌面程序,则会收到错误消息,告诉他们QuickBooks已在运行.然后,他们必须在Windows中打开任务管理器并关闭正在运行的QBW32.exe,然后才能成功打开QuickBooks.
我已经使用我在下面编写的非常基本的C#程序重现了这一点.
在测试应用程序中,我使用以下步骤/方案:
先决条件:1)测试应用程序未设置为自动登录到QuickBooks.它设置为仅在用户打开QuickBooks桌面程序并且具有打开的公司文件时登录.
2)确保在下面的测试之前没有打开QuickBooks.
脚步:
1)打开测试C#应用程序
2)按下"打开连接"按钮.应通过QBXML互操作与QuickBooks的界面打开连接.
3)按"开始会话"按钮.应该使用QuickBooks启动会话.
4)假设上面的测试预先请求已经满足,您应该收到QuickBooks返回的错误消息,告诉您应用程序未设置为自动登录,您需要先打开QuickBooks才能尝试会话.
5)QBW32.exe现在应该在后台运行.
6)按下结束会话的按钮.这应该使用QuickBooks界面结束会话.无论如何,会话应该已经通过步骤3按钮中的try-catch结束.
7)按"关闭连接"按钮.这应该关闭与QuickBooks的所有连接.
8)即使会话和连接已经结束并关闭,QBW32.exe仍然在后台运行.
9)使用退出按钮关闭测试应用程序.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml;
using Interop.QBXMLRP2;
namespace Open_Connection
{
public partial class Form1 : Form
{
bool sessionBegun = false;
bool connectionOpen = false;
RequestProcessor2 rp = null;
string ticket;
public Form1()
{
InitializeComponent();
}
private …Run Code Online (Sandbox Code Playgroud) 当前,我正在尝试在我的datacontext.savechanges()方法之前实现代码,该方法将从数据上下文中分离特定类型的所有对象,以使它们不会插入数据库中。我知道你可以打电话dbContext.Entry(entity).State = EntityState.Detached分离单个实体,但是有没有一种方法可以从上下文分离特定类型的所有对象?
编辑:我实现了Mark C的建议并进行了编译,但是当我尝试执行代码时遇到了无效的操作异常:
实体类型DbEntityEntry不是当前上下文模型的一部分。
foreach (System.Data.Entity.Infrastructure.DbEntityEntry dbEntityEntry in this.dataContext.ChangeTracker.Entries<Customer>())
{
if (dbEntityEntry != null && dbEntityEntry.State != System.Data.Entity.EntityState.Modified && dbEntityEntry.State != System.Data.Entity.EntityState.Unchanged)
{
dataContext.Entry(dbEntityEntry).State = System.Data.Entity.EntityState.Detached;
}
}
Run Code Online (Sandbox Code Playgroud)
编辑#2:在仔细研究之后,我犯了一个错误。似乎需要在DBEntityEntry上指定实体。通过以下更改,它可以工作:
foreach (System.Data.Entity.Infrastructure.DbEntityEntry dbEntityEntry in this.dataContext.ChangeTracker.Entries<Customer>())
{
if (dbEntityEntry.Entity != null && dbEntityEntry.State != System.Data.Entity.EntityState.Modified && dbEntityEntry.State != System.Data.Entity.EntityState.Unchanged)
{
dataContext.Entry(dbEntityEntry.Entity).State = System.Data.Entity.EntityState.Unchanged;
}
}
Run Code Online (Sandbox Code Playgroud)
感谢Gert建议使用EntityState.Unchanged而不是EntityState.Detached。