我正在EF6我的 asp.net 应用程序中使用。在我正在使用的某些代码块中Transaction Scope。以下是我的代码
using (VerbaTrackEntities dataContext = new VerbaTrackEntities())
{
TBL_TARGET target = dataContext.TBL_TARGET.Where(x => x.LNG_TARGET_ID == TargetID).SingleOrDefault();
if (target != null)
{
using (var trans = dataContext.Database.BeginTransaction())
{
try
{
System.Data.Entity.Core.Objects.ObjectContext oc = ((System.Data.Entity.Infrastructure.IObjectContextAdapter)dataContext).ObjectContext;
foreach (var Targets in target.TBL_CASE_TARGET.ToList())
{
oc.DeleteObject(Targets);
}
foreach (var Targets in target.TBL_USER_TARGET.ToList())
{
oc.DeleteObject(Targets);
}
foreach (var Targets in target.TBL_FENCE_TARGET.ToList())
{
oc.DeleteObject(Targets);
}
foreach (var Targets in target.TBL_TARGET_COMM.ToList())
{
oc.DeleteObject(Targets);
}
foreach (var Targets in target.TBL_TRG_FENCE_STATUS.ToList())
{
oc.DeleteObject(Targets);
} …Run Code Online (Sandbox Code Playgroud) 当我试图迭代IEnumerable类型时,我很少知道for循环的性能发生了什么.
以下是导致严重性能问题的代码
foreach (IEdge ed in edcol)
{
IEnumerable<string> row =
from r in dtRow.AsEnumerable()
where (((r.Field<string>("F1") == ed.Vertex1.Name) &&
(r.Field<string>("F2") == ed.Vertex2.Name))
|| ((r.Field<string>("F1") == ed.Vertex2.Name) &&
(r.Field<string>("F2") == ed.Vertex1.Name)))
select r.Field<string>("EdgeId");
int co = row.Count();
//foreach (string s in row)
//{
//}
x++;
}
Run Code Online (Sandbox Code Playgroud)
上层foreach(eddge中的IEdge)大约需要11000次迭代才能完成.如果我删除该行,它会在几分之一秒内运行
int co = row.Count();
Run Code Online (Sandbox Code Playgroud)
从代码.
row.Count()在所有循环中的最大值为10.
如果我取消注释
//foreach (string s in row)
//{
//}
Run Code Online (Sandbox Code Playgroud)
大约需要10分钟才能完成代码的执行.
IEnumerable类型是否有如此严重的性能问题.??
我有一个数据表,其中包含以下列
CallTime CallType
15:45:00 Voice
15:30:54 Voice
00:12:14 SMS
01:13:47 Voice
05:48:23 SMS
12:00:47 Voice
Run Code Online (Sandbox Code Playgroud)
现在我想要使用像这样的Linq结果
Hrs Count
00 1
01 1
02 0
03 0
04 0
05 1
06 0
|
|
|
12 1
13 0
|
15 2
16 0
|
|
23 0
Run Code Online (Sandbox Code Playgroud)
我正在使用以下查询,它给我的数值> 0但我想得到那些也有count = 0
var groupQueryTimeTotal = (from r in Foundrows.AsEnumerable()
let time = TimeSpan.Parse(r.Field<string>("Call Time"))
group r by time.Hours
into g
select new
{
CallTime = g.Key,
CallCount = g.Count(),
}).OrderBy(s …Run Code Online (Sandbox Code Playgroud) 嗨,我有一个以下字段的数据表
DAT_START
GROUPBY
TXT_LATITTUDE
TXT_LONGITUDE
INT_DIRECTION
INT_CALL_DATA_TYPE
LNG_DURATION
Run Code Online (Sandbox Code Playgroud)
以下是我正在使用的LINQ查询
var data = (from r in dt.AsEnumerable()
where ((r.Field<DateTime>("DAT_START").TimeOfDay.Hours < 20) && (r.Field<DateTime>("DAT_START").TimeOfDay.Hours >= 4))
group r by new { CID = r["GroupBy"], CLatitude = r["TXT_LATITUDE"], CLongitude = r["TXT_LONGITUDE"],CDirection = r["INT_DIRECTION"],
CCallType = r["INT_CALL_DATA_TYPE"],CDuration = r["LNG_DURATION"] }
into groupedTable
select new
{
CellID = groupedTable.Key.CID,
CallCount = groupedTable.Count(),
Longitude = groupedTable.Key.CLongitude,
Latitude = groupedTable.Key.CLatitude,
Direction = groupedTable.Key.CDirection,
CallType = groupedTable.Key.CCallType,
Duration = groupedTable.Key.CDuration
}).OrderByDescending(s => s.CallCount);
Run Code Online (Sandbox Code Playgroud)
它给了我这样的结果
CellID = 4057,CallCount = …Run Code Online (Sandbox Code Playgroud) 我计算TimeStamp中javascript使用下面的代码
var timestamp = new Date;
这给我的结果1436504446858包含13数字取决于当前时间.
C#使用以下代码计算相同的事情
DateTime centuryBegin = new DateTime(1970, 1, 1);
DateTime currentDate = DateTime.Now;
long elapsedTicks = currentDate.Ticks - centuryBegin.Ticks;
Run Code Online (Sandbox Code Playgroud)
在这里,我得到14365252465308044包含17数字的结果
为什么这两种方法有如此大的差异?
我想知道当我们编译.net源代码时,它首先转换为MSIL然后转换为二进制可执行代码.我知道MSIL是与机器和语言无关的代码.
但是为什么在被CPU执行之前它首先被转换为MSIL.实际上我们在.net框架中有什么需要MSIL?
我想知道是否假设我有一个基类A继承了一个接口说我和另一个类说B然后是否有任何区别
Class A : I,B
{
// Function and Members
}
Run Code Online (Sandbox Code Playgroud)
和
Class A : B,I
{
// Function and Members
}
Run Code Online (Sandbox Code Playgroud)