gpt4 book ai didi

c# - LINQ:将 lambda 表达式作为要执行的参数传递并由方法返回

转载 作者:IT王子 更新时间:2023-10-29 03:50:32 25 4
gpt4 key购买 nike

场景是这样的:我有一系列不同的存储库类,每个存储库类都可以使用独立的数据上下文或共享的上下文。在使用隔离上下文的情况下,我想向基类添加一个方法,允许我将 lambda 指定为参数,让该表达式由所选存储库的隔离上下文执行并返回 IQueryable 结果.方法签名看起来如何,以及如何将表达式传递给上下文?

我需要尽可能通用的解决方案,因为可以使用任何可能的模型对象/表。

这基本上是我想要做的:

IAssetRepository repo = new AssetRepository(true); // true indicates isolated context
var results = repo.ExecuteInContext<SomeType>(SomeTable.Where(x =>
x.SomeProp.Equals(SomeValue)));

最佳答案

像这样:

public IEnumerable<T> ExecuteInContext<T>(
Expression<Func<T,bool>> predicate)
{
... // do your stuff
//eg
Table<T> t = GetTable<T>();
return t.Where(predicate);
}

public IEnumerable<T> ExecuteInContext<T>(
IQueryable<T> src, Expression<Func<T,bool>> predicate)
{
return src.Where(predicate);
}

用法:

var r = repo.ExecuteInContext<SomeType>( 
x => x.SomeProp.Equals(Somevalue));

var r = repo.ExecuteInContext(GetTable<T>(), 
x => x.SomeProp.Equals(Somevalue));

假设:

  1. 表可以从 T 派生,否则您也需要传递源。
  2. 您知道如何在需要时修改谓词表达式。

关于c# - LINQ:将 lambda 表达式作为要执行的参数传递并由方法返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1299534/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com