【发布时间】:2014-06-23 13:29:09
【问题描述】:
我有具有以下签名的扩展方法:
public static class GenericSeeder
{
public static void Seed<TSeed, TEntity>(this DbContext context, IEnumerable<TSeed> seeds, Expression<Func<TEntity, TSeed, bool>> predicate)
{
// code that I'm looking for goes here
}
}
为了更好地理解该方法的作用,以下是它的使用方法:
context.Seed<SeedClass, EntityClass>(seeds, (entity, seed) => entity.Name == seed.OtherProperty);
所以基本上,我使用谓词来检查种子是否已经被应用。但是,为了进行检查,我必须使用 Linq to Entities 中的 Where 或 FirstOrDefault,其参数如下:
Expression<Func<TEntity, bool>> predicate
所以我的 lambda 表达式是 2 个 IN 参数(TSeed、TEntity)和 1 个 OUT 参数(bool)的函数。我需要遍历提供的 TSeed 对象集合,并且对于每个对象,使用该对象作为我的 lambda 表达式的参数,以生成具有 1 个 IN 参数(TEntity)和 1 个 OUT 参数(bool)的 LINQ 2 Entities lambda 表达式。
有没有办法部分调用 lambda 表达式 / func 以获得另一个 lambda 表达式 / func?
【问题讨论】:
-
虽然我想我知道你在问什么,但我不是 100% 确定。您可以使用
(x,y)=>{x.Frob();return y==x;}之类的东西或类似的东西来执行多语句 lambda(在我的脑海中编译得很好,可能不是用真正的编译器)。这将允许您在内部仅使用一个属性然后再使用另一个属性进行操作。我不能保证除了 linq to objects 之外的任何 linq 提供者都能够用它做事(实际上可能不会)。 -
谓词中的比较总是
==?