- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在尝试将 LINQ 表达式重构为一个方法,并且遇到了“Internal .NET Framework Data Provider error 1025.
”和“The parameter 'xyz' was not bound in the specified LINQ to Entities query expression.
”异常。
以下是实体模型的相关部分(使用 EF 4.2/LINQ to Entities):
public class Place : Entity
{
public string OfficialName { get; protected internal set; }
public virtual ICollection<PlaceName> { get; protected internal set; }
}
public class PlaceName : Entity
{
public string Text { get; protected internal set; }
public string AsciiEquivalent { get; protected internal set; }
public virtual Language TranslationTo { get; protected internal set; }
}
public class Language : Entity
{
public string TwoLetterIsoCode { get; protected internal set; }
}
Place (1) <-----> (0..*) PlaceName (0..*) <-----> (0..1) Language
term
,试着找
Place
实体
OfficialName
以
term
开头或者谁有
PlaceName
谁的
Text
或
AsciiEquivalent
从搜索开始
term
. (
Language
不是我遇到问题的地方,尽管它是查询的一部分,因为
PlaceName
s 应该只匹配
CultureInfo.CurrentUICulture.TwoLetterIsoLanguageName
。)
internal static IQueryable<Place> WithName(this IQueryable<Place> queryable,
string term)
{
var matchesName = OfficialNameMatches(term)
.Or(NonOfficialNameMatches(term));
return queryable.AsExpandable().Where(matchesName);
}
private static Expression<Func<Place, bool>> OfficialNameMatches(string term)
{
return place => place.OfficialName.StartsWith(term);
}
private static Expression<Func<Place, bool>> NonOfficialNameMatches(string term)
{
var currentLanguage = CultureInfo.CurrentUICulture.TwoLetterISOLanguageName;
return place => place.Names.Any(
name =>
name.TranslationToLanguage != null
&&
name.TranslationToLanguage.TwoLetterIsoCode == currentLanguage
&&
(
name.Text.StartsWith(term)
||
(
name.AsciiEquivalent != null
&&
name.AsciiEquivalent.StartsWith(term)
)
)
);
}
NonOfficialNameMatches
提取
name => ...
的方法表达式输出到一个单独的方法中,以便它可以被其他查询重用。这是我试过的一个例子,
不起作用 并抛出异常“
The parameter 'place' was not bound in the specified LINQ to Entities query expression.
”:
private static Expression<Func<Place, bool>> NonOfficialNameMatches(string term)
{
return place => place.Names.AsQueryable().AsExpandable()
.Any(PlaceNameMatches(term));
}
public static Expression<Func<PlaceName, bool>> PlaceNameMatches(string term)
{
var currentLanguage = CultureInfo.CurrentUICulture.TwoLetterISOLanguageName;
return name =>
name.TranslationToLanguage != null
&&
name.TranslationToLanguage.TwoLetterIsoCode == currentLanguage
&&
(
name.Text.StartsWith(term)
||
(
name.AsciiEquivalent != null
&&
name.AsciiEquivalent.StartsWith(term)
)
);
}
.AsExpandable()
链在
NonOfficialNameMatches
,然后我得到“
Internal .NET Framework Data Provider error 1025.
”异常。
.Expand()
的几种组合在谓词上,但总是以上述异常(exception)之一结束。
最佳答案
下面的方法应该有效:
private static Expression<Func<Place, bool>> NonOfficialNameMatches(string term)
{
Expression<Func<PlaceName, bool>> placeNameExpr = PlaceNameMatches(term);
Expression<Func<Place, bool>> placeExpr =
place => place.Names.Any(name => placeNameExpr.Invoke(name));
return placeExpr.Expand();
}
PlaceNameMatches
方法按您编写的方式工作。您的问题在于您如何使用该方法。如果您想分解出表达式的一部分,请按照我在上述方法中执行的 3 个步骤进行操作。
Expand
方法:这将扩展任何调用的表达式 关于entity-framework-4 - 无法使用 LINQ to Entities 和 LinqKit/PredicateBuilder 进行重构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10689506/
我正在使用 LinqKit允许动态组合表达式的库。 对于编写 Entity Framewok 数据访问层来说,这是一种纯粹的幸福,因为可以选择性地重用和组合多个表达式,从而实现代码的可读性和高效性。
我有 2 个类: public class Employee { public int Id {get;set;} public string Name {get;set;} } pu
我开始使用 LinqKit的 PredicateBuilder使用 Linq 表达式无法实现的 OR 条件创建谓词。 我面临的问题是,如果我以 PredicateBuilder.True() 开头它返
我一直在使用LinqKit创建通用查询相当长一段时间。 一直困扰我的一件事是,您总是必须测试过滤器中发送的值是否有效。 例如:假设我有一个字符串过滤器。条件可以是 Equal、StartsWith、E
我一直在使用LinqKit创建通用查询相当长一段时间。 一直困扰我的一件事是,您总是必须测试过滤器中发送的值是否有效。 例如:假设我有一个字符串过滤器。条件可以是 Equal、StartsWith、E
我正在为我的应用程序执行搜索。搜索有效,除非用户的搜索通过搜索相关实体进行级联。我调试了代码并测试了 Entity Framework 生成的 SQL。我发现问题是 Contains() 在 SQL
给定一个简单的父/子类结构。我想使用 linqkit 在父项上应用子 lambda 表达式。我还希望通过实用方法提供 Lambda 表达式。 public class Foo { public
我正在尝试使用 LinqKit AsExpandable在我的 EfCore2.0项目,我遇到了这个问题,其中 Includes不起作用。 在尝试调试时,我下载了 LinqKit来自 github 的
我一直在尝试合并 LINQKit然而,我在共享数据访问层中遇到了障碍。使用 ExpandableQuery 构造嵌套查询时,表达式解析器无法正确解包 ExpandableQuery 并构造有效的 SQ
如何从 LinqKit.ExpandableQuery 返回 SQL ? 我正在使用 stevefenton.co.uk 中的代码但它似乎失败了 private static System.Data.
这是我想做的: class MyDbContext : DbContext { private static Expression> myExpression1 = x => /* somet
我在尝试执行使用 PredicateBuilder 动态构建的查询时遇到问题。 我能够构建查询,但是在执行查询本身时,我得到以下“TypeLoadException”... 运行时: return c
在 Entity Framework Core 中使用谓词生成器时,我收到以下错误。 The source IQueryable doesn't implement IAsyncEnumerable.
我想使用 LinqKit 的 PredicateBuilder 并将谓词传递给相关模型的 .Any 方法。 所以我想建立一个谓词: var castCondition = PredicateBuild
我正在使用 LinqKit PredicateBuilder (http://www.albahari.com/nutshell/predicatebuilder.aspx) 作为执行搜索的方法。这就
我正在使用 LinqKit,我想编写一个谓词,其中代码必须调用一个普通的 bool 方法,如下所示: var predicate = PredicateBuilder.False(); var pre
我正在使用 EntityFramework 和 LinqKit构建被翻译成 SQL 的表达式树。我们还使用规范模式来组织我们的查询。 几乎所有领域对象都需要通过描述执行查询,但在某些类中,属性称为“名
我正在使用 LinqKit (http://www.albahari.com/nutshell/linqkit.aspx) 有没有一种方法可以让下面的代码在不定义具体类的情况下工作? 尝试使用 LIN
我正在尝试动态构造一个类似于下面的表达式,我可以在其中使用相同的比较函数,但可以传入被比较的值,因为该值是从属性“higher-up”传递的' 在查询中。 var people = People
我不完全理解为什么 select 中的嵌套调用在 LinqKit 中不起作用,想知道是否有人能够帮助我理解。 我的问题: 首先让我列出有效的方法。 假设我们有三个数据库对象: public class
我是一名优秀的程序员,十分优秀!