Question

I am getting data from these two tables using linq to entities, relationships exist between tables on primary foriegn key basis, result set is coming but every row is repeating multiple times in reult however in Db there are not duplicate rows. Don't understand how to resolve this.

here is piece of code:

StringBuilder sb = new StringBuilder();
        string text = txtBoxSearch.Text;
        OLSContainer ols = new OLSContainer();
        var result = from tex in ols.COURSEs
                     from another in ols.UNITs
                     where tex.courseName.Contains(text) || tex.description.Contains(text) || another.unitName.Contains(text)
                     select new { tex,another };

        foreach (var cours in result)
        {
            sb.AppendLine("<h2 id='" + cours.tex.courseID + "'><a href='admin.aspx?id='" + cours.tex.courseID + "''>" + cours.tex.courseName + "</a></h2>");
        }

        foreach (var cours in result)
        {
            sb.AppendLine("<h2 id='" + cours.another.unitID + "'><a href='admin.aspx?id='" + cours.another.unitID + "''>" + cours.another.unitName + "</a></h2>");
        }
Was it helpful?

Solution

The problem is this:

var result = from tex in ols.COURSEs
             from another in ols.UNITs

It is a cross join. It matches every course with every unit. It doesn't use any FK/PK because no relation (navigation property) is used in this query. To use the relation you have to modify it to:

var result = from tex in ols.COURSEs
             from another in tex.SomeNavigationProperty  // tex 
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top