Thanks, Chad for the geodatabase. I'm unable to repro with v100.1. It seems like the first relationship reports no related features and the rest of the tables have at least one related feature. Is this what you'd expect with your data?
I used the following code.. similar code for Xamarin Android, slight differences would be namespace how you retrieve file path and display alert messages.
public MainWindow()
{
InitializeComponent();
MyMapView.Map = new Map(Basemap.CreateTopographic());
MyMapView.LayerViewStateChanged += OnLayerViewStateChanged;
MyMapView.GeoViewTapped += OnGeoViewTapped;
}
private async void OnGeoViewTapped(object sender, GeoViewInputEventArgs e)
{
try
{
var results = await MyMapView.IdentifyLayersAsync(e.Position, 2, false);
var layerResult = results?.FirstOrDefault(f =>
f.LayerContent is FeatureLayer &&
((FeatureLayer)f.LayerContent).FeatureTable is ArcGISFeatureTable &&
f.GeoElements.Any());
if (layerResult == null)
return;
var layer = (FeatureLayer)layerResult.LayerContent;
var table = (ArcGISFeatureTable)layer.FeatureTable;
var feature = (ArcGISFeature)layerResult.GeoElements.FirstOrDefault();
var queryResults = await table.QueryRelatedFeaturesAsync(feature);
foreach (var r in queryResults.ToArray())
{
MessageBox.Show($"Feature with ID `{feature.Attributes[table.ObjectIdField]}` has `{r.Count()}` related features from `{r.RelatedTable.TableName}`.");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, ex.GetType().Name);
}
}
private void OnLayerViewStateChanged(object sender, LayerViewStateChangedEventArgs e)
{
var error = e.LayerViewState.Error ?? e.Layer.LoadError;
if (error != null)
MessageBox.Show(error.Message, error.GetType().Name);
}
private async void OnLoad(object sender, RoutedEventArgs e)
{
try
{
var geodatabase = await Geodatabase.OpenAsync(@"E:\dev\palmbeach.geodatabase");
var extent = geodatabase.GenerateGeodatabaseExtent as Envelope;
foreach(var table in geodatabase.GeodatabaseFeatureTables)
{
await table.LoadAsync();
if (table.HasGeometry)
{
if (extent == null || extent.IsEmpty)
extent = table.Extent;
else
extent = GeometryEngine.CombineExtents(extent, table.Extent);
MyMapView.Map.OperationalLayers.Add(new FeatureLayer(table));
}
else
MyMapView.Map.Tables.Add(table);
if (extent != null && !extent.IsEmpty)
await MyMapView.SetViewpointAsync(new Viewpoint(extent));
}
}
catch(Exception ex)
{
MessageBox.Show(ex.Message, ex.GetType().Name);
}
}