我有两个字符串数组(我不会在任何地方使用它,因为它不是一个好的逻辑,这是出于我的学习目的)。
string[] names = new[] { "Joss", "Moss", "Kepler" };
string[] emails = new[] { "Moss@gmail", "Kepler@gmail", "Joss@gmail" };
如何使用LINQ以使键值对像
{"Joss","Joss@gmail"} ,{"Moss","Moss@gmail"} , {"Kepler","Kepler@gmail"}
如何使用Join来投射我想要的结果?
var JoinDemo = from grpname in names
join
grpmails in emails
on grpname ????????
答案 0 :(得分:1)
听起来你想要Zip
operator from .NET 4.0。如果您不能等待那么久,可以使用MoreLINQ中的实现。
我不确定你对洗牌的意思...你真的想随机配对吗?如果是这样的话,最先将一个数组洗牌然后再进行拉链操作最简单。
答案 1 :(得分:1)
使用您定义的约束,这应该完成工作:
var q = from name in names
join email in emails on name equals email.Remove(email.IndexOf('@'))
select new
{
Name = name,
Email = email
};
答案 2 :(得分:0)
这是{3.5} BCL开箱即用的Zip
操作。
如果您有两个相同长度的数组(不适用于通用IEnumerable<T>
),您可以使用:
var zippedArrays = Enumerable.Range(0, Math.Min(a.Length, b.Length))
.Select(i => new { Name = a[i], Email = b[i] })
.ToList();