我们有一个名为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,则无法完成.我该怎么办?
编辑
也许 …
我正在尝试使用以下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 4.3,POCO,数据库,我收到以下错误:
内部.NET Framework数据提供程序错误1025.
问题: 我认为我的查询表达了我的意图,但我似乎遇到了这个错误,所以我想知道是否有人知道如何以不同的方式构建我的查询来解决这个错误?
这是场景......
我有一个SQL Server 2008数据库,有2个表--A和B:
一个
乙
然后我像这样定义上下文:
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) 这就是我想要做的事情:
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:
分离myExpression成myExpression1和myExpression2明确指出,我想单独重用他们的事实.
更新3:
添加了LINQkit示例.
问题1抛出:无法将"System.Linq.Expressions.FieldExpression"类型的对象强制转换为"System.Linq.Expressions.LambdaExpression".
问题2抛出:内部.NET Framework数据提供程序错误1025.
我使用谓词构建器编写以下代码:
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中被分配了两次.不知道为什么?
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