>我必须检查记录是否存在,然后显示一条带有Id
的消息,说明存在以下Id's
。 由于我已经在循环中编写了消息,因此该消息是重复的。 如果我在循环之外编写控制台消息,则作用域结束。
电流输出 :
无法删除,因为存在 ID 1。
无法删除,因为存在 ID 2。
所需输出 :
无法删除,因为存在 ID 1,2。
public class Program
{
public int Id { get; set; }
static void Main(string[] args)
{
List<Program> client = new List<Program>();
client.Add(new Program { Id = 1 });
client.Add(new Program { Id = 2 });
client.Add(new Program { Id = 3 });
client.Add(new Program { Id = 4 });
client.Add(new Program { Id = 5 });
List<Program> server = new List<Program>();
server.Add(new Program { Id = 2});
server.Add(new Program { Id = 4 });
foreach (var c in client)
{
var r = server.Any(x => x.Id == c.Id);
if (r==true)
{
Console.WriteLine(String.Format("Cannot delete as {0} exists",c.Id));
}
}
Console.ReadLine();
}
}
使用这个
public class Program
{
public int Id { get; set; }
static void Main(string[] args)
{
List<Program> client = new List<Program>();
client.Add(new Program { Id = 1 });
client.Add(new Program { Id = 2 });
client.Add(new Program { Id = 3 });
client.Add(new Program { Id = 4 });
client.Add(new Program { Id = 5 });
List<Program> server = new List<Program>();
server.Add(new Program { Id = 2});
server.Add(new Program { Id = 4 });
List<int> lst = new List<int>();
foreach (var c in client)
{
var r = server.Any(x => x.Id == c.Id);
if (r==true)
{
lst.Add(c.Id);
}
}
if(lst.Count() > 0)
Console.WriteLine(String.Format("Cannot delete as {0} exists",string.Join(",",lst)));
Console.ReadLine();
}
}
这可能并不完美,但对您有用,因此请将您的代码修改为
string allID = "";
foreach (var c in client)
{
var r = server.Any(x => x.Id == c.Id);
if (r==true)
{
allID += c.Id + ","; //will append values of matched c.ID with a comma
}
}
allID = allID.Remove(allID.Length - 1); //Removes the last extra comma
Console.WriteLine(String.Format("Cannot delete as {0} exists", allID));
输出:
无法删除,因为存在 ID 1,2。
您应该在循环外部初始化字符串,并在发现新的冲突 ID 时构建它。此外,在输出错误消息之前,请检查字符串中是否至少有 1 个冲突的 Id。
string existingIds = "";
foreach (var c in client)
{
var r = server.Any(x => x.Id == c.Id);
if (r == true)
{
if (existingIds.Equals(string.Empty))
existingIds += c.Id;
else
existingIds += "," + c.Id;
}
}
if (existingIds.Equals(string.Empty))
Console.WriteLine(String.Format("Cannot delete as {0} exists", existingIds));
有很多方法可以获取两个集合的Intersect
:
var intersect = client.Select(c => c.Id).Intersect(server.Select(s => s.Id)); // 2, 4
if (intersect.Any())
Console.WriteLine($"Cannot delete as Id {string.Join(", ", intersect)} exists");
或者效率更高一点:
var server = new HashSet<int> { 2, 4 };
server.IntersectWith(client.Select(c => c.Id));
if (server.Count > 0)
Console.WriteLine($"Cannot delete as Id {string.Join(", ", server)} exists");