相关疑难解决方法(0)

我误解了LINQ to SQL .AsEnumerable()?

考虑以下代码:

var query = db.Table
              .Where(t => SomeCondition(t))
              .AsEnumerable();

int recordCount = query.Count();
int totalSomeNumber = query.Sum();
decimal average = query.Average();
Run Code Online (Sandbox Code Playgroud)

假设query需要很长时间才能运行.我需要获得记录数,总数SomeNumber已经返回,并在结束时取平均值.我以为根据我读的是.AsEnumerable()将执行使用LINQ到SQL,然后使用LINQ到对象的查询Count,Sum以及Average.相反,当我在LINQPad中执行此操作时,我看到相同的查询运行三次.如果我更换.AsEnumerable().ToList(),它只被查询一次.

我错过了什么AsEnumerable/做什么?

.net c# linq linq-to-sql

49
推荐指数
3
解决办法
1万
查看次数

理解LINQ to SQL中的.AsEnumerable()

给出以下LINQ to SQL查询:

var test = from i in Imports
           where i.IsActive
           select i;
Run Code Online (Sandbox Code Playgroud)

解释的SQL语句是:

SELECT [t0].[id] AS [Id] .... FROM [Imports] AS [t0] WHERE [t0].[isActive] = 1
Run Code Online (Sandbox Code Playgroud)

假设我想在select中执行一些无法转换为SQL的操作.我的理解是,实现这一目标的传统方法是AsEnumerable()将其转换为可行的对象.

鉴于此更新的代码:

var test = from i in Imports.AsEnumerable()
           where i.IsActive
           select new 
           { 
               // Make some method call 
           };
Run Code Online (Sandbox Code Playgroud)

并更新了SQL:

SELECT [t0].[id] AS [Id] ... FROM [Imports] AS [t0] 
Run Code Online (Sandbox Code Playgroud)

注意执行的SQL语句中缺少where子句.

这是否意味着整个"Imports"表被缓存到内存中?如果表中包含大量记录,这会导致性能下降吗?

帮助我了解幕后实际发生的事情.

c# linq linq-to-sql asenumerable

44
推荐指数
3
解决办法
4万
查看次数

LINQ to Entities无法识别MVC 4中的方法'System.String ToString()'方法

我正在使用MVC 4,我必须使用Code First Migrations更新我的数据库.我要做的是从数据库表中选择记录,并将它们插入下拉列表,用户可以在其中选择一个.

我有一个我不明白的错误:

LINQ to Entities does not recognize the method 'System.String ToString()' method, and this method cannot be translated into a store expression.

控制器:

  public ActionResult Addnew()
        {
            var dba = new DefaultConnection();
            var query = dba.blob.Select(c => new SelectListItem
            {
                Value = c.id.ToString(),
                Text = c.name_company,
                Selected = c.id.Equals(3)
            });
            var model = new Companylist
            {
                xpto = query.AsEnumerable()
            };

            return View(model);
        }
Run Code Online (Sandbox Code Playgroud)

c# asp.net asp.net-mvc asp.net-mvc-4 ef-migrations

33
推荐指数
1
解决办法
5万
查看次数

LINQ'AsEnumerable'和实体框架

我正在编写类似于以下内容的LINQ查询:

var test = from o in dbcontext.Orders.AsEnumerable()
        where o.ID==1
        select new Order
        { 
             Name = GetName(o.ID)
        };
Run Code Online (Sandbox Code Playgroud)

为了在LINQ查询中调用外部函数,我AsEnumerable()在查询中使用.

我理解通常在ToList()调用枚举函数之前不会执行查询.但在这里,我呼吁枚举查询.

任何人都可以告诉我,这样使用是否被认为是不好的做法AsEnumerable()?与创建查询ToList() 调用相比,它会在性能上受损吗?

c# linq performance entity-framework

4
推荐指数
1
解决办法
1453
查看次数

在LINQ查询中将枚举转换为字符串时出错

我有以下查询,它使用实体框架.

Analytic firstSent = (from a in Repository.Query<Analytic>()
                      where a.EntityType == "Proposal" &&
                      a.EntityId == Program.ActiveProposal.Id &&
                      a.Marker == AnalyticMarker.EmailProposalUrl.ToString()
                      orderby a.TimestampUtc
                      select a).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

在运行时,我收到以下错误:

LINQ to Entities无法识别方法'System.String ToString()'方法,并且此方法无法转换为存储表达式.

a.Marker是一个字符串列,AnalyticMarker.EmailProposalUrl是一个枚举值,我想将该列与该枚举的名称进行比较.

我知道SQL不支持从枚举到字符串的转换,但为什么它不会解析此字符串的值,然后将生成的字符串传递给SQL?这应该工作得很好.

c# linq sql-server entity-framework

3
推荐指数
1
解决办法
6671
查看次数