因此,我正在尝试为我工作的公司创建一个AD自动化程序,但我遇到了名称问题。首先,我正在为他们的电子邮件抓住他们的名字和最后一个首字母,但如果该帐户已经存在,我不知道如何获取另一个数字。
实施例。 JohnS@contoso.com已经存在,另一位同名的绅士为我们工作,所以我需要创建。 防爆。 JohnSm@contoso.com
我试图使用这个例子,但它没有成功。 How to extract first letters from different words in a string in c#
我正在循环程序的这一部分以检查已经创建的用户,如果它在那里它将添加另一个字母,依此类推,直到用户被创建。 TY的帮助!
编辑:对不起英语不是我的第一语言。
我的源代码现在这个小部分让我头疼大声笑。
class Program
{
static void Main(string[] args)
{
List<utable> theList = new List<utable>();
using (var context = new miEntities())
{
theList = context.utables.Where(o => o.Date == null && o.Department == "IS").ToList();
}
foreach (utable id in theList)
{
string Fname = id.Fname;
string Lname = id.lname;
var username = theList.Select((u, i) => new { u.lname, u.Fname, Len = theList.Take(i - 1).Count(iu => iu.Fname == u.Fname && iu.lname == u.lname) + 1 }).Select(u => u.Fname + u.lname.Substring(0, Math.Min(u.Len, u.lname.Length)) + (u.Len >= u.lname.Length ? (u.Len - u.lname.Length + 1).ToString() : ""));
Console.WriteLine(string.Join(" ", username));
Console.ReadKey();
}
}
我现在有控制台推送,所以我可以看到它拉动了什么,但即使我在数据库中的要求存在,我也什么都不拉。尝试使用你们已经列出的一些代码。
答案 0 :(得分:0)
2分钟的回答是这样的:
class User
{
public string FName, LName;
public User(string fname, string lname) { FName = fname; LName = lname; }
}
static void Main(string[] args)
{
var lst = new[] { new User("John", "Smith"), new User("Will", "Smith"), new User("John", "Smith") };
var usernames = lst.Select((u, i) => u.FName + u.LName.Substring(0, lst.Take(i - 1).Count(iu => iu.FName == u.FName && iu.LName == u.LName) + 1));
Console.WriteLine(string.Join(" ", usernames));
}
这给出了以下输出:
JohnS WillS JohnSm
唯一有趣的一行是对usernames
的赋值,这是一个单行Linq语句,对于每个元素,它计算了多少以前的元素(基于当前索引)共享第一个和使用当前名称的姓氏,并从姓氏中取出(Take<>()
)该字符数量(+1,因此您总是至少有一个)并将其附加到名字。
这显然只有在姓氏中有足够的字符才有效,否则会引发异常。简单的解决方法是开始附加数字 - 只需将计数减去名称中的字符数作为字符串。称之为功课!
编辑:感到无聊,这里也是附加数字的版本:
var usernames = lst.Select((u, i) => new { u.LName, u.FName, Len = lst.Take(i - 1).Count(iu => iu.FName == u.FName && iu.LName == u.LName) + 1 })
.Select(u => u.FName + u.LName.Substring(0, Math.Min(u.Len, u.LName.Length)) + (u.Len >= u.LName.Length ? (u.Len - u.LName.Length + 1).ToString() : ""));
答案 1 :(得分:0)
这似乎有效。我不认为你的姓氏用完就会出现问题,因为订单应该首先放置姓氏较短的人。
List<string[]> names = new List<string[]>()
{
new string[] { "Jason", "Boyd" },
new string[] { "Jason", "Boyle"},
new string[] { "Jason", "Bower"},
new string[] { "John", "Smith" },
new string[] { "Will", "Smith"},
new string[] { "John", "Smith"}
};
names
.OrderBy(x => x[0])
.ThenBy(x => x[1])
.Aggregate(new List<string>(), (acc, x) =>
{
// Append first name.
string temp = x[0];
// Append the first character of the last name.
temp += x[1][0];
// If the accumulator has no names yet then add 'temp' and move on.
if(acc.Count == 0)
{
acc.Add(temp);
}
else
{
// If the accumulator has names then construct a new name
// by adding characters from the last name to 'temp' until
// 'temp' does not match the last name in the accumulator.
string lastEntry = acc.Last();
int index = 1;
while(lastEntry.IndexOf(temp, 0, StringComparison.InvariantCultureIgnoreCase) >= 0)
{
temp += x[1][index];
index++;
}
// Add 'temp' to the accumulator.
acc.Add(temp);
}
return acc;
})
答案 2 :(得分:0)
考虑这样的事情:
public class User
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
public IEnumerable<string> GenerateEmails()
{
for (int i = 0; i < LastName.Length; i++)
{
yield return String.Format("{0}{1}@domain.com", FirstName, LastName.Substring(0, i+1));
}
}
}
GenerateEmails
方法为您提供了电子邮件候选,您可以使用它来与注册用户列表进行比较,如下所示:
public class Program
{
static void Main()
{
User user = CreateUser("jhon", "smik");
Console.WriteLine(user.Email);
}
static User CreateUser(string firstName, string lastName)
{
User user = new User { FirstName = firstName, LastName = lastName };
var registeredUsers = GetSampleUsers();
foreach (string email in user.GenerateEmails())
{
if (!registeredUsers.Any(u => u.Email.Equals(email)))
{
user.Email = email;
break;
}
}
return user;
}
static List<User> GetSampleUsers()
{
return new List<User>
{
new User { FirstName = "jhon", LastName = "smith", Email = "jhon@domain.com" },
new User { FirstName = "jhon", LastName = "sack", Email = "jhons@domain.com" },
new User { FirstName = "jhon", LastName = "samuelson", Email = "jhonsa@domain.com" }
};
}
}
CreateUser
方法会创建一个新的User
对象,并尝试使用唯一的电子邮件初始化其Email
属性。