Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当C#Linq中存在Id时,显示带有记录的单个消息_C#_Linq - Fatal编程技术网

当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
这样的散列集合,从该值计算一个散列数以估计在何处查找它,并且只比较很少的元素。