3

我刚刚开始使用 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

4 回答 4

2

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

于 2012-07-02T06:47:23.903 回答
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" } }
于 2012-07-02T06:45:42.893 回答
1

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

var result = listOfStrings.Where(y => y.Split().Aggregate(0, (y, x) => int.Parse(y)) < 50).Select(y => y.Split());
于 2012-07-02T07:11:38.793 回答
-1

也许:

listOfString.Where(s => s.Length < 50).ToArray();
于 2012-07-02T06:50:10.237 回答