简单版本
var myVar = some object;
myList.Where(element => myVar != null && element.Name == myVar.Name)
我想写什么
public static (Return Value) Start<T>(this T input, Func<(IDK what goes here)> exp)
{
var theVar = somehow get the myVar that was passed in;
if (theVar != null)
{
apply exp; <= I can do this part
}
}
myList.Start((myVar, element) => element.Name == myVar.Name));
基本上可以编写表达式,而不必每次都检查是否为空。
答案 0 :(得分:0)
使用匿名lambda(我认为未经测试)>
myList.Start((myVar, () => element) => element.Name == myVar.Name));
答案 1 :(得分:0)
我找到了一种方法,我写了一个BaseExtension类,里面没有很多东西,只是一些属性的持有人
public static BaseExtension<T> Start<T, TValue>(this IQueryable<T> input, TValue value, Func<TValue, Expression<Func<T, bool>>> expression) =>
new BaseExtension<T>(input, value == null ? null : expression.Invoke(value));
这可以让我写
_context.MyEntities.Start(myVar, value => entity => entity.Id.ToString() == myVar)
并传入myVar允许我在数据库中执行查询之前在后台执行c#逻辑。
一个例子是myVar!= null,或者我可以添加一个自定义函数,该函数将不应用该表达式
答案 2 :(得分:-1)
where方法应为布尔类型,可以使用此
private static <type> <name>(<type> arg)
{
return true;
}
如果这对您不起作用,请在Visual Studio上的Insiderewhere中编写一些内容,然后按ctrl +。 。
查看摘要实现