我有以下字符串数组:
var sa = new string[] {"yabba","dabba","doo"};
Run Code Online (Sandbox Code Playgroud)
我可以使用string.Join()将它转换为"yabba,dabba,doo"但是这样做的超酷LINQ方式是什么?Join扩展方法似乎很有希望,但对于像我这样的新手来说非常困惑.
class String包含非常有用的方法 - String.Join(string, string[]).
它从数组创建一个字符串,用给定的符号分隔数组的每个元素.但一般 - 它不会在最后一个元素后添加分隔符!我将它用于ASP.NET编码,用<br />"或"分隔Environment.NewLine.
所以我想在每行之后添加一个空行asp:Table.我IEnumerable<TableRow>可以使用哪种方法来实现相同的功能?
我最近读到.NET 4的System.String类有一个新的Join方法重载.这个新的重载采用了一个分隔符,IEnumerable<T>它允许将任意集合连接成一个字符串,而无需转换为中间字符串数组.
凉!这意味着我现在可以这样做:
var evenNums = Enumerable.Range(1, 100)
.Where(i => i%2 == 0);
var list = string.Join(",",evenNums);
Run Code Online (Sandbox Code Playgroud)
......而不是这个:
var evenNums = Enumerable.Range(1, 100)
.Where(i => i%2 == 0)
.Select(i => i.ToString())
.ToArray();
var list = string.Join(",", evenNums);
Run Code Online (Sandbox Code Playgroud)
...因此节省了将每个项目转换为字符串,然后分配数组.
但是,作为一般编程功能样式的粉丝,特别是C#中的方法链接,我宁愿能够写出这样的东西:
var list = Enumerable.Range(1, 100)
.Where(i => i%2 == 0)
.string.Join(",");
Run Code Online (Sandbox Code Playgroud)
这不是合法的C#.是的,我可以这样做Enumerable.Aggregate,是的,我可以使用我自己的Join扩展方法来实现它,但是这些方法难以阅读/效率低下并感觉像是一个警察(分别),所以我想尝试做它是一种不同的方式.我到目前为止最接近的是这样的:
var list = Enumerable.Range(1, 100)
.Where(i => i%2 == 0)
.ApplyTo(
Functional.Curry<string, IEnumerable<object>, string>
(string.Join)(",")
);
Run Code Online (Sandbox Code Playgroud)
...使用以下扩展方法:
public …Run Code Online (Sandbox Code Playgroud) 对于问题的不良标题,如果它是重复的,请道歉.
我有两个数据库表:
Users Documents
------- ---------
ID ID
Name DocumentName
UserID
Run Code Online (Sandbox Code Playgroud)
说我有1条记录 Users
1, "bob"
Run Code Online (Sandbox Code Playgroud)
和三个相关的记录 Documents
1, "Doc1", 1
2, "Doc2", 1
3, "Doc3", 1
Run Code Online (Sandbox Code Playgroud)
我想生成一个结果集:
1, "bob", "Doc1, Doc2, Doc3"
Run Code Online (Sandbox Code Playgroud)
我尝试过涉及合并多个结果集的各种事情但得到错误: Local sequence cannot be used in LINQ to SQL implementation of query operators except the Contains() operator.
我应该怎么做呢.