当C#Linq中存在Id时,显示带有记录的单个消息
我必须检查记录是否存在,然后显示一条带有当C#Linq中存在Id时,显示带有记录的单个消息,c#,linq,C#,Linq,我必须检查记录是否存在,然后显示一条带有Id的消息,说明以下Id的存在。 因为我已经在循环中写入了消息,所以消息是重复的。 如果我在循环之外编写控制台消息,那么作用域结束 电流输出: 无法删除,因为Id 1存在。 无法删除,因为Id 2存在 所需输出: 无法删除,因为存在Id 1,2 公共类程序 { 公共int Id{get;set;} 静态void Main(字符串[]参数) { 列表客户端=新列表(); Add(新程序{Id=1}); Add(新程序{Id=2}); Add(新程序{Id=3
Id
的消息,说明以下Id的
存在。
因为我已经在循环中写入了消息,所以消息是重复的。
如果我在循环之外编写控制台消息,那么作用域结束
电流输出:
无法删除,因为Id 1存在。无法删除,因为Id 2存在 所需输出: 无法删除,因为存在Id 1,2
公共类程序
{
公共int Id{get;set;}
静态void Main(字符串[]参数)
{
列表客户端=新列表();
Add(新程序{Id=1});
Add(新程序{Id=2});
Add(新程序{Id=3});
Add(新程序{Id=4});
Add(新程序{Id=5});
列表服务器=新列表();
Add(新程序{Id=2});
Add(新程序{Id=4});
foreach(客户机中的var c)
{
var r=server.Any(x=>x.Id==c.Id);
如果(r==true)
{
WriteLine(String.Format(“无法删除,因为{0}存在”,c.Id));
}
}
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
这可能并不完美,但对您来说是可行的,因此请修改您的代码以
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));
您应该在循环外部初始化字符串,并在发现新的冲突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));
用这个
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();
}
}
公共类程序
{
公共int Id{get;set;}
静态void Main(字符串[]参数)
{
列表客户端=新列表();
Add(新程序{Id=1});
Add(新程序{Id=2});
Add(新程序{Id=3});
Add(新程序{Id=4});
Add(新程序{Id=5});
列表服务器=新列表();
Add(新程序{Id=2});
Add(新程序{Id=4});
List lst=新列表();
foreach(客户机中的var c)
{
var r=server.Any(x=>x.Id==c.Id);
如果(r==true)
{
第一次添加(c.Id);
}
}
如果(lst.Count()>0)
WriteLine(String.Format(“无法删除,因为{0}存在”,String.Join(“,”,lst));
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();
}
}
公共类程序
{
公共int Id{get;set;}
静态void Main(字符串[]参数)
{
列表客户端=新列表();
Add(新程序{Id=1});
Add(新程序{Id=2});
Add(新程序{Id=3});
Add(新程序{Id=4});
Add(新程序{Id=5});
列表服务器=新列表();
Add(新程序{Id=2});
Add(新程序{Id=4});
List lst=新列表();
foreach(客户机中的var c)
{
var r=server.Any(x=>x.Id==c.Id);
如果(r==true)
{
第一次添加(c.Id);
}
}
如果(lst.Count()>0)
WriteLine(String.Format(“无法删除,因为{0}存在”,String.Join(“,”,lst));
Console.ReadLine();
}
}
有很多方法可以获得两个集合的组合:
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");
var-server=newhashset{2,4};
IntersectWith(client.Select(c=>c.Id));
如果(server.Count>0)
Console.WriteLine($”无法删除,因为Id{string.Join(“,”,server)}存在);
有很多方法可以获得两个集合的组合:
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");
var-server=newhashset{2,4};
IntersectWith(client.Select(c=>c.Id));
如果(server.Count>0)
Console.WriteLine($”无法删除,因为Id{string.Join(“,”,server)}存在);
这是一个很好的方法。这是一个很好的方法。想知道为什么在这里设置Hashset,它的性能比List好。@Dave如果使用List
或数组,您必须比较列表中的每个项,以检查它是否包含特定值。对于像Dictionary
和HashSet
这样的散列集合,从该值计算一个散列数以估计在何处查找它,并且只比较很少的元素。想知道为什么在这里设置Hashset,它的性能比List好。@Dave使用List
或Array
,您必须比较列表中的每个项目,以检查它是否包含特定的值。对于像Dictionary
和HashSet
这样的散列集合,从该值计算一个散列数以估计在何处查找它,并且只比较很少的元素。