相关疑难解决方法(0)

将func作为Linq中的参数传递给实体和"内部.NET Framework数据提供程序错误1025"错误

我们有一个名为Task的类:

public partial class Task : EntityObject
{
    public EntityCollection<TaskUser> TaskUsers { get {...} set{...} } 
}
Run Code Online (Sandbox Code Playgroud)

它有一个名为TaskUsers的导航属性,其中包含附加到此taks的用户:

public partial class TaskUser : EntityObject
{
    public User User { get {...} set {  } }
}
Run Code Online (Sandbox Code Playgroud)

每个TaskUser对象都有User对象.

我们得到了IQueryable<Task> tasks.我们希望找到分配给ID = 1的用户的任务.当我们使用时

tasks.Where(t => t.TaskUsers.Any(a => a.User.ID == 1))
Run Code Online (Sandbox Code Playgroud)

一切正常.当我们使用

Func<TaskUser, bool> function = a => a.User.ID == 1;
return tasks.Where(t => t.TaskUsers.Any(function));
Run Code Online (Sandbox Code Playgroud)

我们得到了很好的'Internal .NET Framework Data Provider error 1025'错误 为什么?我想使用Expression类构建更复杂的过滤器,但如果我不能通过简单Func,则无法完成.我该怎么办?

编辑

也许 …

lambda linq-to-entities entity-framework

18
推荐指数
1
解决办法
5325
查看次数

实体框架BuildContainsExpression导致内部.NET Framework数据提供程序错误1025

我正在尝试使用以下LINQ查询来对数据库(3.5 SP1)起作用:

var labelIds = new List<int> { 1, 2 };
var customersAggregatedTransactionsByType =
    (from transactions in context.TransactionSet
    from customers in context.CustomerSet
        .Where(LinqTools.BuildContainsExpression<Billing.Customer, int>(u => u.LabelId, labelIds))
    from accounts in context.AccountSet
    where customers == accounts.Customer
        && accounts.Id == transactions.Account.Id
        && transactions.DateTime >= fromDate && transactions.DateTime < toDate
    group transactions.Amount
    by new
    {
        UserAccountId = transactions.Account.Id,
        TransactionTypeId = transactions.TransactionTypeId,
        BaseAssetId = accounts.BaseAssetId
    } into customerTransactions
    select customerTransactions).ToList();
Run Code Online (Sandbox Code Playgroud)

一旦我添加,Where(LinqTools.BuildContainsExpression<Billing.Customer, int>(u => u.LabelId, labelIds))我得到以下异常:

System.InvalidOperationException:内部.NET Framework数据提供程序错误1025.

如果我删除Where(LinqTools.BuildContainsExpression<Billing.Customer, int>(u => u.LabelId, …

entity-framework internal

9
推荐指数
1
解决办法
3437
查看次数

如何解决"内部.NET Framework数据提供程序错误1025".

我首先使用Entity Framework 4.3,POCO,数据库,我收到以下错误:

内部.NET Framework数据提供程序错误1025.

问题: 我认为我的查询表达了我的意图,但我似乎遇到了这个错误,所以我想知道是否有人知道如何以不同的方式构建我的查询来解决这个错误?

这是场景......

我有一个SQL Server 2008数据库,有2个表--A和B:

一个

  • AId(int - not null - identity - primary key)
  • AName(nvarchar(10) - not null)

  • BId(int - not null - identity - primary key)
  • SomeName(nvarchar(10) - not null)
  • AId(int - not null - 连接到表A中的AId的外键)

然后我像这样定义上下文:

public class DatabaseContext : DbContext
{
    public DatabaseContext(string name)
        : base(name)
    {
        Configuration.AutoDetectChangesEnabled = false;
        As = Set<A>();
        Bs = Set<B>();
    }

    public DbSet<A> As { get; private set; }
    public DbSet<B> Bs { …
Run Code Online (Sandbox Code Playgroud)

.net c# entity-framework poco entity-framework-4.3

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

使用LINQkit在LINQ to Entities Select中调用Expression

这就是我想要做的事情:

class MyDbContext : DbContext 
{
    private static Expression<Func<MyClass, int>> myExpression1 = x => /* something complicated ... */;
    private static Expression<Func<Item, int>> myExpression2 = x => /* something else complicated ... */;

    public object GetAllData()
    {
        return (
            from o in MyClassDbSet.AsExpandable() 
            select new 
            {
                data1 = myExpression1.Invoke(o),                      // problem 1
                data2 = o.Items.Select(myExpression2.Compile())       // problem 2
            }
        );
    }
}
Run Code Online (Sandbox Code Playgroud)

更新:

myExpression 必须与我的查询保持分离,因为我想在多个LINQ查询中重用它.

更新2:

分离myExpressionmyExpression1myExpression2明确指出,我想单独重用他们的事实.

更新3:

添加了LINQkit示例.

问题1抛出:无法将"System.Linq.Expressions.FieldExpression"类型的对象强制转换为"System.Linq.Expressions.LambdaExpression".

问题2抛出:内部.NET Framework数据提供程序错误1025.

c# linq-to-entities linq-expressions linqkit

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

使用Linq PredicateBuilder嵌套或使用

我使用谓词构建器编写以下代码:

IEnumerable<int> ids= new List<int> { 47, 48 };

var predicate = PredicateBuilder.False<Customer>();

predicate = predicate.And(x => x.CreatedAt >= fromDate && x.CreatedAt <= toDate);

foreach (var id in ids)
{
    predicate = predicate.Or(x => x.Source.Id == id);
}

var result = Database.Set<Customer>().AsExpandable()
                                     .Where(predicate)
                                     .ToList();
Run Code Online (Sandbox Code Playgroud)

生成的SQL看起来像(只是WHERE子句):

WHERE ([Filter6].[SourceId] IN (@p__linq__0,@p__linq__1))
AND ([Filter6].[CreatedAt] >= @p__linq__2)
AND ([Filter6].[CreatedAt] <= @p__linq__3)',
N'@p__linq__0 int,
@p__linq__1 int,
@p__linq__2 datetime2(7),
@p__linq__3 datetime2(7)',
@p__linq__0=48,
@p__linq__1=48,
@p__linq__2='2012-02-07 21:59:55.0437985',
@p__linq__3='2012-02-07 22:04:55.5748288'
Run Code Online (Sandbox Code Playgroud)

它看起来像id在SQL中被分配了两次.不知道为什么?

linq predicatebuilder

2
推荐指数
1
解决办法
3193
查看次数

Using Count() function throws “Internal .NET Framework Data Provider error 1025.”

This is my code:

var icdCodes = DbContext.MasterIcd.Select(x => x.IcdCode).AsQueryable();
var count = icdCodes.Where(x => !x.Any(char.IsDigit)).Count();
Run Code Online (Sandbox Code Playgroud)

I'm trying to find those IcdCodes which doesn't contain any characters. But using count throws the following error: “Internal .NET Framework Data Provider error 1025.”

As mentioned in Internal .NET Framework Data Provider error 1025 I'm using AsQuerable() but still getting the error. Please help

.net c# linq

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