This repository was archived by the owner on Jun 16, 2024. It is now read-only.
This repository was archived by the owner on Jun 16, 2024. It is now read-only.
Linked Entity Query with a mixture of null and not null values returns wrong value #324
Closed
Description
I have a query that returns columns from a linked entity. When the value of one of the fields of the linked entity is null, it being returned as the value of the previous entity when it should be being returned as null.
e.g.
I have forked the repo and added a unit test - see this commit:
daveb84@b17605d
Full test code:
[Fact]
public void TestRetriveMultipleWithLinkEntityWithAlternateNullField()
{
// ARRANGE
List<Entity> initialEntities = new List<Entity>();
Entity parentEntity = new Entity("parent");
parentEntity["parentname"] = "parent name";
parentEntity.Id = Guid.NewGuid();
initialEntities.Add(parentEntity);
// create the first child which has the "myvalue" field set to "value"
Entity childEntity1 = new Entity("child");
childEntity1["parent"] = parentEntity.ToEntityReference();
childEntity1["name"] = "entity1";
childEntity1["myvalue"] = "value";
childEntity1.Id = Guid.NewGuid();
initialEntities.Add(childEntity1);
// create the second child which has the "myvalue" field set to null
Entity childEntity2 = new Entity("child");
childEntity2["parent"] = parentEntity.ToEntityReference();
childEntity2["name"] = "entity2";
childEntity2["myvalue"] = null;
childEntity2.Id = Guid.NewGuid();
initialEntities.Add(childEntity2);
XrmFakedContext context = new XrmFakedContext();
IOrganizationService service = context.GetOrganizationService();
context.Initialize(initialEntities);
// the query selects the "parent" entity, and joins to the "child" entities
QueryExpression query = new QueryExpression("parent");
query.ColumnSet = new ColumnSet("parentname");
LinkEntity link = new LinkEntity("parent", "child", "parentid", "parent", JoinOperator.Inner);
link.EntityAlias = "c";
link.Columns = new ColumnSet("name", "myvalue");
query.LinkEntities.Add(link);
// ACT
DataCollection<Entity> results = service.RetrieveMultiple(query).Entities;
// ASSERT
// fields for the first entity work as expected...
string entity1Name = results[0].GetAttributeValue<AliasedValue>("c.name").Value as string;
string entity1Value = results[0].GetAttributeValue<AliasedValue>("c.myvalue").Value as string;
Assert.Equal("entity1", entity1Name);
Assert.Equal("value", entity1Value);
// fields for the second entity do not.
// The child "name" field is correct, but the "myvalue" field is returning the value of the previous
// entity when it should be returning null
string entity2Name = results[1].GetAttributeValue<AliasedValue>("c.name").Value as string;
string entity2Value = results[1].GetAttributeValue<AliasedValue>("c.myvalue").Value as string;
// this works fine:
Assert.Equal("entity2", entity2Name);
// this fails (entity2Value is "value")
Assert.Equal(null, entity2Value);
}