使用LINQ将逗号分隔的字符串转换为列表

8

我有三个逗号分隔的字符串FirstName, MiddleInitial, LastName

我有一个类NameDetails

public class NameDetails
{
    public string FirstName { get; set; }
    public string MiddleInitial { get; set; }
    public string LastName { get; set; }
}

我的字符串值为:

FirstName ="John1, John2, John3"
MiddleInitial = "K1, K2, K3"
LastName = "Kenndey1, Kenndey2, Kenndey3"

我需要用逗号分隔的字符串填充NameDetails列表。

有没有相应的linq代码可以实现?我需要在我的asp.net mvc (C#)应用程序中使用。

3个回答

13

我并不一定推荐这种方法作为一个好的解决方案,但它可以完成你要求的任务,也就是“用LINQ来实现”。

同时,这也可能不是最有效率的解决方法。

string FirstName ="John1, John2, John3";
string MiddleInitial = "K1, K2, K3";
string LastName = "Kenndey1, Kenndey2, Kenndey3";
List<String> fn = new List<String>(FirstName.Split(','));
List<String> mi = new List<String>(MiddleInitial.Split(','));
List<String> ln = new List<String>(LastName.Split(','));

IEnumerable<NameDetails> result = from f in fn
        join i in mi on fn.IndexOf(f) equals mi.IndexOf(i)
        join l in ln on fn.IndexOf(f) equals ln.IndexOf(l)
        select new NameDetails {f, i, l};

我先使用LINQPad试验了一下(使用了匿名类,而非NameDetails类)。


1
你不需要使用List<string>的Split方法来创建字符串数组,因为数组已经可以通过LINQ访问了。 - MichaelT
3
这是否说明Linq可能不是完成此任务的最佳工具?看来用for循环替换Linq会更清晰明了。 - Graham Clark
我同意,for循环已经完全足够了。我只是想借此机会尝试一下LINQ。 - rohancragg
@MichaelT 如果没有 List<T>,IndexOf() 就不可用了。我对使用它并不是很满意,但这是我能想到的第一件可行的事情 :-) - rohancragg
感谢 @rohancragg,你的两个答案都对我有用。但根据你的评论,我将使用这个。 - Prasad
@rohancragg 你可以使用 Array.IndexOf() 方法来避免使用 List<T>。 - Zain Shaikh

1

关于我的上一个回答,你也可以尝试以下方法:

// some setup
string firstName ="John1, John2, John3";
string middleInitial = "K1, K2, K3";
string lastName = "Kenndey1, Kenndey2, Kenndey3";
var fn = firstName.Split(',');
var mi = middleInitial.Split(',');
var ln = lastName.Split(',');

// the important bit
var s = fn.Select((f, index) => new NameDetails {f, i = mi[index], l = ln[index]});

字符串数组的条目数量不相等时,它将变得脆弱。

感谢 SO 上的先前答案


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接