I'm currently trying to have a view which shows Site model objects in a Grid.
Site Model objects includes a Customer Model object.
public class Site
{
[Key]
public long SiteId { get; set; } = 0;
public long CustomerId { get; set; }
public virtual Customer Customer { get; set; }
public string Name { get; set; }
public string Adress1 { get; set; }
}
public class Customer
{
[Key]
public long CustomerId { get; set; } = 0;
public string Name { get; set; }
}
In the model when I ask for base Site model fields and also included Customer fields it's displayed correctly :
<ejs-grid id="SiteGrid" locale="fr-FR" allowSorting="true" allowFiltering="true")">
<e-data-manager url="https://localhost:44350/api/Site/UrlDatasource" crossdomain="true" adaptor="UrlAdaptor"></e-data-manager>
<e-grid-columns>
<e-grid-column field="SiteId" headerText=@Localizer["ID"].Value type="number" width="20" textAlign="Right" isIdentity="true" allowEditing="false"></e-grid-column>
<e-grid-column field="Customer.Name" headerText=@Localizer["Customer name"].Value type="string" width="75" isIdentity="true" allowEditing="false"></e-grid-column>
<e-grid-column field="Customer.CustomerId" headerText=@Localizer["Customer Id"].Value type="string" width="20" isIdentity="true" allowEditing="false"></e-grid-column>
<e-grid-column field="Adress1" headerText=@Localizer["Adress1"].Value type="string" width="75"></e-grid-column>
</e-grid-columns>
</ejs-grid>
But when I try to filter on a column which belong to the Customer object (sub object), I got the following error :
System.InvalidOperationException : 'Processing of the LINQ expression 'DbSet<Site>
.Include("Customer")
.Select((a, i) => new {
a = a,
TempData = __ToList_0.get_Item(i)
})' by 'NavigationExpandingExpressionVisitor' failed. This may indicate either a bug or a limitation in EF Core. See https://go.microsoft.com/fwlink/?linkid=2101433 for more detailed information.'
[HttpPost]
public IActionResult UrlDatasource([FromBody] DataManagerRequest dm)
{
IEnumerable<Site> sites = _context.Site.Include("Customer").AsEnumerable();
DataOperations operation = new DataOperations();
if (dm.Search != null && dm.Search.Count > 0)
{
sites = operation.PerformSearching(sites, dm.Search); //Search
}
if (dm.Sorted != null && dm.Sorted.Count > 0) //Sorting
{
sites = operation.PerformSorting(sites, dm.Sorted);
}
if (dm.Where != null && dm.Where.Count > 0)
{
sites = operation.PerformFiltering(sites, dm.Where, dm.Where[0].Operator); //Filtering
}
if (dm.Skip != 0)
{
sites = operation.PerformSkip(sites, dm.Skip); //Paging
}
if (dm.Take != 0)
{
sites = operation.PerformTake(sites, dm.Take);
}
return Ok(new { result = sites, count = sites.Count() });
}
Could you fix this problem or explain how to achieve the filtering ?
Best regards,
Romain