有没有办法可以将包含LINQ where子句的字符串添加到列表中?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有没有办法可以将包含LINQ where子句的字符串添加到列表中?相关的知识,希望对你有一定的参考价值。
我有这个代码:
switch (Settings.cvm)
{
case CVM.IncludeHidden:
return new SelectedPhrases()
{
ps = ps,
psNoa = psNoa
};
case CVM.ExcludeHidden:
return new SelectedPhrases()
{
ps = ps.Where(x => x.Hidden == false).ToList(),
psNoa = psNoa.Where(x => x.Hidden == false).ToList()
};
case CVM.Hidden:
return new SelectedPhrases()
{
ps = ps.Where(x => x.Hidden == true).ToList(),
psNoa = psNoa.Where(x => x.Hidden == true).ToList()
};
case CVM.Favorites:
return new SelectedPhrases()
{
ps = ps.Where(x => x.Favorite == true).ToList(),
psNoa = psNoa.Where(x => x.Favorite == true).ToList()
};
default:
return null;
}
有没有办法,而不是从交换机内部返回,我可以让交换机返回我只是where子句,例如:
x => x.Hidden == false
然后在切换后将where子句添加到变量ps和psNoa中?
答案
您可以使用委托Func作为where子句。然后将委托放在Where()方法中。
void Main()
{
var persons = new []
{
new Person { Id = 1, Name = "Alice", Active = true },
new Person { Id = 2, Name = "Bob", Active = false },
new Person { Id = 3, Name = "Charlie", Active = true },
};
Func<Person, bool> whereClause;
var isActive = true; // change the value here
if (isActive)
whereClause = x => x.Active == true;
else
whereClause = x => x.Active == false;
var query = persons.Where(whereClause);
query.Dump();
}
class Person
{
public int Id { get; set; }
public string Name { get; set; }
public bool Active { get; set; }
}
另一答案
你的确可以
在开关中就行了
case zzz:
ps = ps.Where(xxxxx).ToList();
psnoa = psnoa.Where(yyyy).ToList();
break;
....
然后切换。
return new SelectedPhrases()
{
ps.ToList(),
psNoa.ToList()
};
关键是你可以随意构建一个LINQ操作管道。注意 - 最好将所有内容保留为IEnuemrable而不是List。这会将评估推迟到最后
以上是关于有没有办法可以将包含LINQ where子句的字符串添加到列表中?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 linq lambda 扩展方法执行带有 where 子句的左外连接