Linq和三元运营商

时间:2014-05-19 08:02:47

标签: c#-4.0

以下代码有效但在三元运算符中我必须得到"内容"字段2次,有没有办法存储"内容"变量中的字段然后进行caparison?

List<MPContentSearchResultItem> list = (from result in results
                                     select new MPContentSearchResultItem()
                                     {  
                                         Content = string.IsNullOrEmpty(GetSummary(result.Document.GetItem().GetFieldValue("Content"), 300)) ? GetSummary(result.Document.GetItem().GetFieldValue("Circumstances"), 300) :GetSummary(result.Document.GetItem().GetFieldValue("Content"), 300)
                                     }).ToList();

条件是&#34;内容&#34;字段为空或具有空值,然后从&#34; Circumstances&#34;否则从内容中获取价值&#34;内容&#34;领域。

2 个答案:

答案 0 :(得分:2)

您可以使用let clause

存储子表达式的结果
from result in results
let contentSummary = GetSummary(result.Document.GetItem().GetFieldValue("Content"), 300)
select new MPContentSearchResultItem()
{  
    Content = string.IsNullOrEmpty(contentSummary) ? GetSummary(result.Document.GetItem().GetFieldValue("Circumstances"), 300) : contentSummary
};

变量contentSummary仅在查询中可用。

你可以用某种冗长的子表达式result.Document.GetItem()做同样的事情(可能并不总是意味着更少的输入,但可以让事情更容易阅读):

from result in results
let item = result.Document.GetItem()
let contentSummary = GetSummary(item.GetFieldValue("Content"), 300)
select new MPContentSearchResultItem()
{  
    Content = string.IsNullOrEmpty(contentSummary) ? GetSummary(item.GetFieldValue("Circumstances"), 300) : contentSummary
};

答案 1 :(得分:2)

您可以使用let clause

var query = from result in results
            let content = GetSummary(result.Document.GetItem().GetFieldValue("Content"), 300)
            select new MPContentSearchResultItem()
            {  
                Content = string.IsNullOrEmpty(content)
                    ? GetSummary(result.Document.GetItem().GetFieldValue("Circumstances"), 300)
                    : content
            };

List<MPContentSearchResultItem> list = query.ToList();