An issue when getting different record from related table

61 views Asked by At

i have an issue when getting different record from related table : for example i have two table name as Tag and Product.I'm going to set tag for each product.Product table item what exits on tag table not show if this item exist on Product table.

public class Tags
{
    public int TagId {get;set;}
    public string Title {get;set;}
}

public class Products
{
    public int Id {get;set;}
    public string Title {get;set;}
}

public class ProductsTag
{
    public int Id {get;set;}
    public int ProductId {get;set;}
    public int TagId {get;set;}
}

var tagList = List<Tags>();
tagList.Add(new Tags{TagId = 1, "Cacao"});
tagList.Add(new Tags{TagId = 2, "Banana"});
tagList.Add(new Tags{TagId = 3, "Chevy"});
tagList.Add(new Tags{TagId = 4, "Nuts"});

var productList = List<Products>();
productList.Add(new Products{Id=1, "Chocolate"});
productList.Add(new Products{Id=2, "Chocolate"});

var pTagList = List<ProductsTag>();
pTagList.Add(new ProductsTag{Id=1, ProductId=1, TagId=1});
pTagList.Add(new ProductsTag{Id=2, ProductId=1, TagId=4});
pTagList.Add(new ProductsTag{Id=3, ProductId=2, TagId=1});


foreach(var i in tagList)
{
    foreach(var n in pTagList)
    {
        if(i.TagId!=n.TagId)
        {
            i.Title;
        }
    }
}
2

There are 2 answers

0
Mashton On BEST ANSWER

So what are you trying to do? When you do i.Title what are you expecting to happen?

If you're trying to find the tags that aren't in the pTagList then, as you've seen, your two foreach loops are flawed and won't do that.

Some linq will help though ...

var unusedTags = tagList
        .Except(from tag in tagList
            join productsTag in pTagList on tag.TagId equals productsTag.TagId
            select tag);
0
HellBaby On

I hope this is what you want

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            List<Tags> tagList = new List<Tags>();
            tagList.Add(new Tags { TagId = 1, Title = "Cacao" });
            tagList.Add(new Tags { TagId = 2, Title = "Banana" });
            tagList.Add(new Tags { TagId = 3, Title = "Chevy" });
            tagList.Add(new Tags { TagId = 4, Title = "Nuts" });

            List<Products> productList = new List<Products>();
            productList.Add(new Products { Id = 1,Title= "Chocolate" });
            productList.Add(new Products { Id = 2,Title= "Chocolate" });

            List<ProductsTag> pTagList = new List<ProductsTag>();
            pTagList.Add(new ProductsTag { Id = 1, ProductId = 1, TagId = 1 });
            pTagList.Add(new ProductsTag { Id = 2, ProductId = 1, TagId = 4 });
            pTagList.Add(new ProductsTag { Id = 3, ProductId = 2, TagId = 1 });

            List<string> missingstuff = new List<string>();

            foreach (var i in tagList)
            {
                int index = pTagList.FindIndex(item => item.TagId == i.TagId);
                if (index < 0) 
                {
                     missingstuff.Add(i.Title);                  
                }                             
            }
        }

        public class Tags
{
    public int TagId {get;set;}
    public string Title {get;set;}
}

public class Products
{
    public int Id {get;set;}
    public string Title {get;set;}
}

public class ProductsTag
{
    public int Id {get;set;}
    public int ProductId {get;set;}
    public int TagId {get;set;}
}


    }

}