Linq在一个语句中只调用一次函数

时间:2011-11-14 11:11:05

标签: c# .net linq

我对Linq很新。我有这样的事情:

dict = fullGatewayResponse.
Split(',').ToDictionary(key => key.Split('=')[0], value => value.Split('=')[1])

这很好但是由于显而易见的原因,我不希望split()方法被调用两次。 我怎么能这样做?

感谢您的所有回复:),但我只能选择一个。

4 个答案:

答案 0 :(得分:12)

您可以使用ToDictionary

将每个项目转换为Select之前的数组
dict = fullGatewayResponse.Split(',')
                          .Select(item => item.Split('='))
                          .ToDictionary(keySelector:     parts => parts[0],
                                        elementSelector: parts => parts[1]);

答案 1 :(得分:8)

dict = (from item in fullGatetayResponse.Split(',')
        let pair = item.Split('=')
        select pair).ToDictionary(x => x[0], x => x[1]);

或者,如果你想隐藏数组的存在:

dict = (from item in fullGatetayResponse.Split(',')
        let pair = item.Split('=')
        select new{Key=pair[0],Value=pair[1]).ToDictionary(x=>x.Key,x=>x.Value);

答案 2 :(得分:4)

试试这个:

dict = fullGatewayResponse.Split(',')
       .Select(y => y.Split('='))
       .ToDictionary(y => y[0], x => x[1]) 

答案 3 :(得分:0)

这样可行,但我认为保存拆分操作没有任何意义

var dict = fullGatewayResponse.Split(',')
                .Select(i=>i.Split('='))
                .ToDictionary(key=>key[0],value=>value[1]);