C# 创建空lambda表达式
考虑以下功能:C# 创建空lambda表达式,c#,.net,lambda,C#,.net,Lambda,考虑以下功能: public async Task<IEnumerable<Purchases>> GetPurchases(User user, Expression<Func<Purchases, bool>> whereClause) { using (var context = new UserDbContext()) { cont
public async Task<IEnumerable<Purchases>> GetPurchases(User user, Expression<Func<Purchases, bool>> whereClause)
{
using (var context = new UserDbContext())
{
context.Users.Attach(user);
context.Entry(user).Collection(p => p.Purchases)
.Query()
.Where(whereClause)
.Load();
if (Equals(user.Purchases, null))
return new List<Purchases>();
}
return user.Purchases;
}
这是基于问题,但对于使where子句为空的行,我得到了错误
错误7并非所有代码路径都在lambda表达式中返回类型为的值
“System.Func”“并非所有代码路径都返回值”表示lambda没有返回任何内容。我的意思是,它只有一条代码路径,而且不长
<代码>其中不允许为其指定空lambda表达式
你需要给它一些东西,它可以用来过滤项目
这其实很简单:
if (Equals(whereClause, null))
whereClause = o => true;
这是一个where子句,它总是返回true
,而不管您给它什么。这可能就是你想要的:如果没有过滤器,包括所有内容。对于枚举中的每个项目,一次一个,其中
将该项目作为o
提供给lambda。如果lambda返回true
,则在结果中包含o
的值
如果希望null筛选器不返回任何项目,只需返回false即可:
if (Equals(whereClause, null))
// Whatever it is, I'm against it.
whereClause = o => false;
“并非所有代码路径都返回值”表示lambda没有返回任何内容。我的意思是,它只有一条代码路径,而且不长
<代码>其中不允许为其指定空lambda表达式
你需要给它一些东西,它可以用来过滤项目
这其实很简单:
if (Equals(whereClause, null))
whereClause = o => true;
这是一个where子句,它总是返回true
,而不管您给它什么。这可能就是你想要的:如果没有过滤器,包括所有内容。对于枚举中的每个项目,一次一个,其中
将该项目作为o
提供给lambda。如果lambda返回true
,则在结果中包含o
的值
如果希望null筛选器不返回任何项目,只需返回false即可:
if (Equals(whereClause, null))
// Whatever it is, I'm against it.
whereClause = o => false;
whereClause
必须返回一个布尔值才能在LinQs方法中使用它
假设您不想筛选列表(包括所有项目),则必须返回true
,否则false
:
if (Equals(whereClause, null))
whereClause = () => true;
注意:{
和}
如果只返回一条语句中的值,则不需要
但是您应该知道,大多数框架方法都不是这样工作的。它们将抛出一个而不是设置一个值。
whereClause
必须返回一个布尔值才能在LinQs方法中使用它
假设您不想筛选列表(包括所有项目),则必须返回true
,否则false
:
if (Equals(whereClause, null))
whereClause = () => true;
注意:{
和}
如果只返回一条语句中的值,则不需要
但是您应该知道,大多数框架方法都不是这样工作的。它们将抛出一个而不是设置一个值。假设当
whereClause
为空时,您不想应用任何筛选器
using (var context = new UserDbContext())
{
context.Users.Attach(user);
context.Entry(user).Collection(p => p.Purchases)
.Query()
.Where(whereClause ?? p => true)
.Load();
if (Equals(user.Purchases, null))
return new List<Purchases>();
}
使用(var context=new UserDbContext())
{
context.Users.Attach(用户);
context.Entry(user.Collection)(p=>p.Purchases)
.Query()
.Where(Where子句??p=>true)
.Load();
if(等于(user.Purchases,null))
返回新列表();
}
假设当whereClause
为空时,您不想应用任何筛选器
using (var context = new UserDbContext())
{
context.Users.Attach(user);
context.Entry(user).Collection(p => p.Purchases)
.Query()
.Where(whereClause ?? p => true)
.Load();
if (Equals(user.Purchases, null))
return new List<Purchases>();
}
使用(var context=new UserDbContext())
{
context.Users.Attach(用户);
context.Entry(user.Collection)(p=>p.Purchases)
.Query()
.Where(Where子句??p=>true)
.Load();
if(等于(user.Purchases,null))
返回新列表();
}