Linq用匿名方法

时间:2012-07-02 06:41:12

标签: c# linq lambda

我刚刚开始使用LINQ,我遇到了一些麻烦。

说我想做这样的事情:

IEnumerable<String[]> = from s in listOfStrings
                      where () => {
                          int sum = 0;
                          for (int i=0; i<s.Length(); i++)
                          {
                              sum += s[i];
                          }
                          return sum < 50;
                      }
                      select () =>
                      {
                          String[] t = new String[s.Length()];
                          for (int i=0; i<s.Length(); i++)
                          {
                              t[i] = s[i].toString();
                          }
                          return t;
                      }

基本上我想从listOfStrings中的字符串中获取一个字符数组,其总和小于50。

这只是一个例子,很难想到一个更无用的函数吧,我只是想找出如何在linq中执行lambda函数中的东西,而不需要创建一个新函数。

谢谢!

4 个答案:

答案 0 :(得分:2)

如果使用方法链语法而不是查询语法(即listOfStrings.Where(...)),则可以将lambda放在那里。

答案 1 :(得分:1)

在这种情况下使用lambda函数可能更容易......

var listOfStrings = new List<string>() { "foo", "bar" };
IEnumerable<string[]> result = 

    // restrict to strings where the sum of ASCII values is < 1000
    listOfStrings.Where(item => item.Sum(ch => (int)ch) < 1000)

    // select each as an array of strings
    .Select(item => item.Select(ch => ch.ToString()).ToArray());

// result:  { { "f", "o", "o" }, { "b", "a", "r" } }

答案 2 :(得分:1)

我认为这样的事情可能对你有帮助,我没有编译它所以它可能是代码中的一些错误但是概念在那里:

var result = listOfStrings.Where(y => y.Split().Aggregate(0, (y, x) => int.Parse(y)) < 50).Select(y => y.Split());

答案 3 :(得分:-1)

也许:

listOfString.Where(s => s.Length < 50).ToArray();