繁体   English   中英

如何在一行中编写以下lambda表达式?

[英]How can I write the following lambda expression in one line?

我想按以下方式获取记录

SearchResult.condition为null,然后从Person中获取所有行

如果SearchResult.condition为false,则获取PersonType列包含空值的行

如果SearchResult.condition为true,则获取PersonType列包含非null值的行

 struct SearchResult
 {
     public string Name;
     public bool? condition; 
 }

 Expression<Func<Person, bool>> expression;
 if(condition==null)
 {
     expression= (a =>
        (SearchResult.Name==null || a.Name == SearchResult.Name)
     );
 } 

else if(condition.Value == true)
 {
    expression= (a =>
    (SearchResult.Name==null || a.Name == SearchResult.Name)
    && a.PersonType != null)
 } 
 else if(condition.Value == false)
 {
    expression= (a =>
    (SearchResult.Name==null || a.Name == SearchResult.Name)
    && a.PersonType == null)
 }

我想在一个表达式中编写表达式,而不要使用if else条件。 你能帮我吗?

好了,您可以使用条件运算符执行此操作,但是您需要为每个lambda表达式指定表达式树的类型:

var expression = condition == null
    ? (Expression<Func<Person, bool>>) a => SearchResult.Name == null || 
                                            a.Name == SearchResult.Name
    : condition.Value
    ? (Expression<Func<Person, bool>>) a => (SearchResult.Name == null || 
                                             a.Name == SearchResult.Name) &&
                                            a.PersonType != null
    : (Expression<Func<Person, bool>>) a => (SearchResult.Name == null || 
                                             a.Name == SearchResult.Name) &&
                                            a.PersonType == null;

但是,假设您要在LINQ查询中使用此功能,则可以使用以下方法更好:

var query = foo.Where(a => SearchResult.Name == null ||
                           a.Name == SearchResult.Name);
if (condition != null)
{
    query = condition.Value ? query.Where(a => a.PersonType != null)
                            : query.Where(a => a.PersonType == null);
}

顺便说一句,我强烈建议您避免编写可变结构或使用公共字段。

您可以缩短为:

expression = a => 
    (SearchResult.Name == null || a.Name == SearchResult.Name) && 
    (SearchResult.condition == null || Search.condition == (a.PersonType != null));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM