我刚刚开始使用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函数中的东西,而不需要创建一个新函数。
谢谢!
答案 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();