相关疑难解决方法(0)

410
推荐指数
10
解决办法
17万
查看次数

由于DbContext已被丢弃,因此无法完成操作

我是EF的新手,我正在尝试使用从我的数据库类型转换User为我的信息类的扩展方法UserInfo.
如果这有所作为,我首先使用数据库?

我的代码给出了错误

由于已经处理了DbContext,因此无法完成操作.

try
{
    IQueryable<User> users;
    using (var dataContext = new dataContext())
    {
        users = dataContext.Users
                  .Where(x => x.AccountID == accountId && x.IsAdmin == false);
        if(users.Any() == false)
        {
            return null;
        }
    }
    return users.Select(x => x.ToInfo()).ToList(); // this line is the problem
}
catch (Exception ex)
{
    //...
}
Run Code Online (Sandbox Code Playgroud)

我可以看到为什么它会这样做,但我也不明白为什么where语句的结果没有被保存到users对象中?

所以我想我的主要问题是为什么它不起作用,其次是什么是使用扩展方法和EF的正确方法?

c# extension-methods entity-framework

33
推荐指数
3
解决办法
10万
查看次数

Linq - 找出延期执行的最快方法是什么?

找出哪些.net框架linq方法(例如.IEnumerable linq方法)使用延迟执行而不是使用延迟执行实现的最快方法是什么.

虽然编码很多次,但我想知道这个是否会以正确的方式执行.找出答案的唯一方法是访问MSDN文档以确保.会不会有更快的方式,任何目录,网络上的任何列表,任何备忘单,你可以分享的任何其他技巧?如果是,请这样做.这将有助于许多linq新手(像我一样)减少错误.唯一的另一个选择是检查文档,直到一个人使用它们足以记住(这对我来说很难,我往往不记得在某处记录的"任何东西",可以查找:D).

.net c# linq deferred-execution

30
推荐指数
3
解决办法
9126
查看次数

Linq to Entities中的动态where子句

我正在使用linq到实体(EF).我有一个构造函数,它接受4个字符串参数.根据什么参数不为null,我必须构建linq查询.我可以使用if else语句,但我也有其他10个参数的构造函数,在这种情况下,将有许多组合要检查.

例:

Constructor(p1,p2,p3,p4)
{
  var prod= from p in ctxt.products.expand("items\details")
            where p.x==p1 && p.xx==p2 && p.xxx==p3 && p.xxxx==p4
            select p;
}
Run Code Online (Sandbox Code Playgroud)

在上面的where子句中,只有当参数不为null时才应该进行条件检查.即,如果p2为null,那么where子句应如下所示

where p.x==p1 && p.xxx==p3 && p.xxxx==p4
Run Code Online (Sandbox Code Playgroud)

如果p2和p3为null则

where p.x==p1 && p.xxxx==p4
Run Code Online (Sandbox Code Playgroud)

谁能告诉我如何处理这个问题.如果可能的话,你可以为此提供示例代码

linq entity-framework dynamic where-clause

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

单个LINQ to SQL查询中的SUM和COUNT

我正在尝试在LINQ-TO-SQL中创建以下查询。

select count(*), sum( o.CostInCents ) from Orders o
where Flag = true;
Run Code Online (Sandbox Code Playgroud)

我想出了以下LINQ查询:

var q = db.Orders
    .Where(o => o.Flag )

var result = q
    .GroupBy(o => 1)
    .Select(g => new MyDTO
    {
        NoOfOrders = g.Count(),
        TotalInCents = g.Sum(o => o.CostInCents )
    })
    .SingleOrDefaultAsync();
Run Code Online (Sandbox Code Playgroud)

有没有更好的办法?

.GroupBy(o => 1)即使OK?

另一个选择是执行两个查询,如下所示。

var q = db.Orders
   .Where(o => o.Flag );

//No groupBy
var result2 = new MyDTO
{
    NoOfCostedOrders = q.Count(),//hit the db
    TotalInCents = q.Sum(o => o.CostInCents )//hit the …
Run Code Online (Sandbox Code Playgroud)

c# linq linq-to-sql

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