标签: linq-to-entities

通过Linq从数据库中删除很慢

我在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)

c# linq database linq-to-entities

0
推荐指数
1
解决办法
382
查看次数

LINQ to Entities返回"对象引用未设置为对象的实例".

我有一段代码,使用一个名为的视图检查用户是否在我们的数据库中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)

c# linq linq-to-entities entity-framework

0
推荐指数
1
解决办法
4831
查看次数

在C#代码中将SQL位数据类型转换为1或0

使用SQL的Entity Framework我正在访问一个字段,它的架构说" bit"现在我想把它放在C#代码中int 我写了这样的东西:这是正确的吗?或者还有其他方法吗?

int myResult = Convert.ToInt32(ef.thatField);
Run Code Online (Sandbox Code Playgroud)

c# linq-to-entities

0
推荐指数
1
解决办法
1787
查看次数

Linq to Entities组查询,给出每个组中的结果列表

如果我有一组具有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,然后再决定在代码中进行迭代并建立结果。

c# linq linq-to-entities entity-framework

0
推荐指数
1
解决办法
1808
查看次数

LINQ查询中的实体GetType

我有一个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()'方法,并且此方法无法转换为商店表达式.

c# linq linq-to-entities entity-framework linq-to-sql

0
推荐指数
2
解决办法
4213
查看次数

OR运算符在LINQ中不起作用

我需要选择一个不包含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)

c# linq linq-to-entities entity-framework

0
推荐指数
1
解决办法
125
查看次数

哪个更好地检查null类型或在LINQ中使用Any()?

我有这两个代码,我必须知道哪个更好用.我在想这是一样的.如果我没有弄错,第一个只有一次调用数据库,但是,我不知道检查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)

c# linq linq-to-entities entity-framework linq-to-sql

0
推荐指数
1
解决办法
70
查看次数

C#,使用多个 .Where() 语句过滤 IEnumerable,性能下降

我有一个 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 的数据库调用)

c# linq performance ienumerable linq-to-entities

0
推荐指数
1
解决办法
3221
查看次数

来自查询的实体框架异常.此上下文仅支持原始类型或枚举类型

不知道为什么我在下面运行此查询时遇到此错误

无法创建"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)

c# linq linq-to-entities entity-framework linq-to-sql

0
推荐指数
1
解决办法
82
查看次数

linq到EF,如何使用'top`方法

我想使用linq to Entities来提供top按降序列排序的记录Value1.

我知道我写的像:

MyCollection.OrderByDescending(item => item.Value1).FirstOrDefault();

但是我该如何使用以下方法Top呢?

System.Data.Objects.ObjectQuery.Top(string,params System.Data.Objects.ObjectParameter [])

c# sql linq linq-to-entities entity-framework

-1
推荐指数
1
解决办法
447
查看次数

将巨大的动态数据导出到csv.csv的百万条记录

我们正在测试我们的应用程序的功能,这里是场景,我们有一个包含500万条记录的表,我们想将它导出到csv,所以我们成功地创建了一个csv编写器类.主要问题是当我们导出整个记录时,我们捕获OOM异常(内存不足异常),当数据超过一百万时,用户可以选择要导出哪些列更难以实现..是否存在没有阻塞过程的任何方式来抓住好东西 什么类型的过程最适合这种情况??? 我应该使用(以及如何)使用后台进程吗?

任何观点(例子)都很受欢迎.谢谢...

c# linq-to-entities entity-framework export-to-csv asp.net-mvc-4

-1
推荐指数
1
解决办法
1943
查看次数

Linq SelectMany 查询不起作用

我有以下数据库表,其中主题和评论之间的关系是 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 linq-to-entities linq-to-sql

-1
推荐指数
1
解决办法
1710
查看次数

为什么AsEnumerable还在服务器上执行过滤器

我在我的程序中使用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

c# linq-to-entities

-1
推荐指数
1
解决办法
109
查看次数