我在c#中删除了一个应用程序,我利用linq to entities
它在我的应用程序中构建查询.但是我发现我的应用程序在添加和删除记录时非常慢.删除500条记录大约需要15分钟.那太久了.我的删除查询如下.
public void deletePayrollBatch(int batchNo)
{
var context = new DataSources.sspEntities();
var query1 = (from a in context.Payroll_Details
where a.Payroll_BatchBatch_no == batchNo
select a).ToList();
foreach (var x in query1)
{
context.DeleteObject(x);
context.SaveChanges();
}
}
Run Code Online (Sandbox Code Playgroud)
我的查询相当简单.一行数据确实包含大约20列.我不知道这是否会产生影响.无论如何,如果我能得到一些专家建议,那将会有所帮助.谢谢.
编辑.
基于删除,我已经有了很好的建议.其中之一是context.SaveChanges()
在循环之外使用.在我的插入中,我有类似的代码(如下所示),但我需要首先保存记录,因为我希望ID在另一个函数中使用它.在这种情况下,我该怎么办?
foreach (var xyz in x)
{
Try{
pDetails1.EstateID = 143;
pDetails1.Employee_Personal_InfoEmp_id = xyz.PD_EmpPersonal_Id;
pDetails1.PAYE = (decimal)xyz.PD_PAYE.GetValueOrDefault();
pDetails1.PAYE_YTD = (decimal)PayeYTD.GetValueOrDefault();
pDetails1.Basic_Pay = (decimal)xyz.PD_BasicPay.GetValueOrDefault();
pDetails1.Basic_Pay_YTD = (decimal)basicpay_YTD.GetValueOrDefault();
pDetails1.Gross_Pay = (decimal)xyz.PD_GrossPay.GetValueOrDefault();
pDetails1.Gross_Pay_YTD = (decimal)GrossPay_YTD.GetValueOrDefault();
context.SaveChanges();
Functions.RandomFunct rf = new RandomFunct(); …
Run Code Online (Sandbox Code Playgroud) 我有一段代码,使用一个名为的视图检查用户是否在我们的数据库中RESOURCE_V
.如果没有,代码使用Entity Framework使用Active Directory中的用户信息将用户添加到数据库.然后,我想重新查询RESOURCE_V
视图以获取提交的信息.这样做我得到"对象引用未设置为对象的实例.".这是完整的代码:
HALEntities context = new HALEntities();
List<RESOURCE_V> userData = (from i in context.RESOURCE_V
where i.NT_USER_N == Environment.UserName
select i).ToList();
// add user to RSRC table using Active Directory details
if (userData.Count > 0)
{
PrincipalContext principleContext = new PrincipalContext(ContextType.Domain, HAL_Globals.domain);
UserPrincipal user = UserPrincipal.FindByIdentity(principleContext, IdentityType.SamAccountName, HAL_Globals.domain + "\\" + Environment.UserName);
RSRC rsrc = new RSRC();
rsrc.RSRC_I = context.RSRCs.Select(u => u.RSRC_I).Max() + 1;
rsrc.NT_USER_N = user.SamAccountName + "AAAA";
rsrc.FRST_N = user.GivenName;
rsrc.LAST_N = user.Surname;
rsrc.INIL_N …
Run Code Online (Sandbox Code Playgroud) 使用SQL的Entity Framework我正在访问一个字段,它的架构说" bit
"现在我想把它放在C#代码中int
我写了这样的东西:这是正确的吗?或者还有其他方法吗?
int myResult = Convert.ToInt32(ef.thatField);
Run Code Online (Sandbox Code Playgroud) 如果我有一组具有3个属性(Id,Type,Size)的实体,它们都是字符串。
有没有使用LINQ to实体在那里我可以做一组查询,给了我的一种方式Size
+ Type
的键,然后的相关ID的该列表Size
+ Type
?
下面的示例获得计数:
Items.GroupBy(x => new { x.Size, x.Type})
.Select(x => new { Key = x.Key, Count = x.Count() })
Run Code Online (Sandbox Code Playgroud)
但我想获取每个分组的ID列表吗?
我打算先决定是否可以使用Linq-to-EF,然后再决定在代码中进行迭代并建立结果。
我有一个LINQ查询,想要选择我的实体类型,如下所示:
static void Main(string[] args)
{
using (var currentContext = new MyContext())
{
var x = (from c in currentContext.GeneralAccounts
select new { CType = c.GetType() }).ToList();
}
}
Run Code Online (Sandbox Code Playgroud)
但是这个查询会出错:
错误:LINQ to Entities无法识别方法'System.Type GetType()'方法,并且此方法无法转换为商店表达式.
我需要选择一个不包含2年级和8年级的列表.现在所有2年级的项目也会选择.请看下面是我的代码
var subjectList = printViewModel.GetSubjects().Where(p => p.Grade != "2" || p.Grade != "8");
Run Code Online (Sandbox Code Playgroud)
PrintTemplateViewModel类
public class PrintTemplateViewModel
{
public List<SubjectsViewModel> lstSubjectsViewModel { get; set; }
public List<SubjectsViewModel> GetSubjects()
{
return lstSubjectsViewModel;
}
}
public class SubjectsViewModel
{
public string Grade { get; set; }
}
Run Code Online (Sandbox Code Playgroud) 我有这两个代码,我必须知道哪个更好用.我在想这是一样的.如果我没有弄错,第一个只有一次调用数据库,但是,我不知道检查repo!= null是否正确.
(1)
var repo = Repository
.Query()
.Where(ur => ur.CustomerId == customerId)
.SingleOrDefault();
if (repo != null)
{
// Update repo
repo.Name = "name here";
}
else
{
// code
}
Run Code Online (Sandbox Code Playgroud)
(2)
var repo = Repository
.Query()
.Any(ur => ur.CustomerId == customerId);
if (repo)
{
var result = Repository
.Query()
.Where(ur => ur.CustomerId == customerId)
.Single();
result.Name = "name here";
}
else
{
// code
}
Run Code Online (Sandbox Code Playgroud) 我有一个 IEnumerable,我正在通过 .Where 表达式对其应用多个过滤器。我的代码看起来像这样
public List<MyObject> FilteringFunction(List<MyObject> listToFilter, List<Filter> filters)
{
// A dirty way to have an enumerable instead of List
var enumerableToFilter = listToFilter.Where(x => true);
foeach(var filter in filters)
{
enumerableToFilter = enumerableToFilter.Where(x => x.Value.Contains(filter.Value));
}
return enumerableToFilter.ToList();
}
Run Code Online (Sandbox Code Playgroud)
我是否只遍历我的集合一次?(因为我只有一个使用 LINQ to SQL 的数据库调用)
不知道为什么我在下面运行此查询时遇到此错误
无法创建"YogaBandy2017.Models.Profile.YogaProfile"类型的常量值.在此上下文中仅支持基元类型或枚举类型.
var requestedEvents = dbContext.YogaSpaceEvents
.Where(i => i.RequestedInstructor == yogaProfile)
.OrderByDescending(i => i.EventDateTime)
.Select(i => new PendingEvent
{
SpaceName = i.YogaSpace.Overview.Title,
SpaceImage = i.YogaSpace.YogaSpaceImages
.Where(j => j.IsMainImage)
.Select(j => j.ImageThumbnailCropped11)
.FirstOrDefault(),
SpaceId = i.YogaSpace.YogaSpaceId,
SpaceEventsHosted = i.YogaSpace.ClassesHosted,
SpaceReviewNumber = i.YogaSpace.ReviewNumber,
SpaceReviewPercent = i.YogaSpace.ReviewPercentage,
SpaceNumberOfReviews = i.YogaSpace.NumberOfReviews,
HostImage = i.YogaSpace.YogaProfile.YogaProfileImages
.Where(k => k.IsMainImage)
.Select(k => k.ImageThumbnailCropped)
.FirstOrDefault(),
HostId = i.YogaSpace.YogaProfile.YogaProfileId,
HostName = i.YogaSpace.YogaProfile.FirstName,
EventDateTime = i.EventDateTime,
Style = i.StyleMain.ToString(),
Duration = i.Duration,
EventId = i.YogaSpaceEventId
})
.ToList();
Run Code Online (Sandbox Code Playgroud) 我想使用linq to Entities来提供top
按降序列排序的记录Value1
.
我知道我写的像:
MyCollection.OrderByDescending(item => item.Value1).FirstOrDefault();
但是我该如何使用以下方法Top
呢?
System.Data.Objects.ObjectQuery.Top(string,params System.Data.Objects.ObjectParameter [])
我们正在测试我们的应用程序的功能,这里是场景,我们有一个包含500万条记录的表,我们想将它导出到csv,所以我们成功地创建了一个csv编写器类.主要问题是当我们导出整个记录时,我们捕获OOM异常(内存不足异常),当数据超过一百万时,用户可以选择要导出哪些列更难以实现..是否存在没有阻塞过程的任何方式来抓住好东西 什么类型的过程最适合这种情况??? 我应该使用(以及如何)使用后台进程吗?
任何观点(例子)都很受欢迎.谢谢...
c# linq-to-entities entity-framework export-to-csv asp.net-mvc-4
我有以下数据库表,其中主题和评论之间的关系是 1:N
Category
id
name
Topic
id
title
category_id
Comment
id
details
topic_id
deleted (boolean)
Run Code Online (Sandbox Code Playgroud)
我想要一个查询来计算每个类别中的评论总数。我有以下 LINQ 查询,但它不起作用:
@foreach (var cat in Model.AllPermissionSets.Keys)
{
var commentCount = cat.Topics.Where(c => c.Comments.deleted != 0).SelectMany(x => x.Comments).Count();
@* some other stuff *@
}
Run Code Online (Sandbox Code Playgroud)
在 Visual Studio 中我收到错误IList<Comment> doesn not contain a definition for deleted...
执行上述操作的正确语法是什么?
我在我的程序中使用Linq to Entities,我有以下两个简单的查询:
var result = dbContext.Customers.Where(c => c.Name == "Mostafa").ToList();
var result2 = dbContext.Customers.Where(c => c.Name == "Mostafa").AsEnumerable().ToList();
Run Code Online (Sandbox Code Playgroud)
当我运行SQL事件探查器时,我发现生成的SQL查询对于两个查询都是相同的!问题是为什么在第二个查询中,虽然我使用asEnumerable,在服务器端执行过滤?
更新:更改第二个查询时,过滤应用于内存而不是服务器:
var result2 = dbContext.Customers.AsEnumerable().Where(c => c.Name == "Mostafa").ToList();
Run Code Online (Sandbox Code Playgroud)
感谢@Willem Van Onsem
linq-to-entities ×13
c# ×12
linq ×10
linq-to-sql ×4
database ×1
ienumerable ×1
performance ×1
sql ×1