当 C# Linq 中存在 Id 时,显示带有记录的单个消息



>我必须检查记录是否存在,然后显示一条带有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");

最新更新