Skip to main content
.NET 8.0+

DevExpress v24.2 Update — Your Feedback Matters

Our What's New in v24.2 webpage includes product-specific surveys. Your response to our survey questions will help us measure product satisfaction for features released in this major update and help us refine our plans for our next major release.

Take the survey Not interested

IObjectSpace.FindObject<ObjectType>(CriteriaOperator, Boolean) Method

Searches for the first object that matches the specified criteria. The object’s type is designated by the specified generic type parameter.

Namespace: DevExpress.ExpressApp

Assembly: DevExpress.ExpressApp.v24.2.dll

NuGet Package: DevExpress.ExpressApp

#Declaration

ObjectType FindObject<ObjectType>(
    CriteriaOperator criteria,
    bool inTransaction
)

#Parameters

Name Type Description
criteria CriteriaOperator

A CriteriaOperator descendant which is the criteria for matching persistent objects.

inTransaction Boolean

true, if the filter takes unsaved changes into account; otherwise, false.

#Type Parameters

Name Description
ObjectType

The Type of objects that are retrieved.

#Returns

Type Description
ObjectType

An object which is the first persistent object which matches the specified criteria.

#Remarks

The following example uses a Parametrized Action to search for a Person by LastName, and then assigns all deferred tasks to that person.

using System.Collections;
using DevExpress.Data.Filtering;
using DevExpress.ExpressApp;
using DevExpress.ExpressApp.Actions;
using DevExpress.Persistent.Base;
using DevExpress.Persistent.Base.General;
using DevExpress.Persistent.BaseImpl;
// ...
public class AssignTasksController : ObjectViewController<ListView, MainDemo.Module.BusinessObjects.DemoTask> {
    public AssignTasksController() {
        ParametrizedAction assignTasksAction = new ParametrizedAction(
            this, "AssignTasks", PredefinedCategory.Edit, typeof(string));
        assignTasksAction.Execute += AssignTasksAction_Execute;
    }
    private void AssignTasksAction_Execute(object sender, ParametrizedActionExecuteEventArgs e) {
        IObjectSpace objectSpace = View.ObjectSpace;
        string personParamValue = e.ParameterCurrentValue as string;
        CriteriaOperator personCriteria = CriteriaOperator.Parse("Contains([LastName], ?)", personParamValue);
        Person person = objectSpace.FindObject<Person>(personCriteria, true);
        if(person != null) {
            CriteriaOperator taskCriteria = CriteriaOperator.Parse("[Status] = ?", TaskStatus.Deferred);
            IList tasks = objectSpace.GetObjects(
                typeof(MainDemo.Module.BusinessObjects.DemoTask), taskCriteria);
            foreach(MainDemo.Module.BusinessObjects.DemoTask task in tasks) {
                task.AssignedTo = person;
            }
        }
    }
}

When implementing the IObjectSpace interface in the BaseObjectSpace class’s descendant, you don’t have to implement the FindObject<ObjectType> method. The BaseObjectSpace class’ FintObject<ObjectType>(CriteriaOperator criteria, Boolean inTransaction) method invokes a public virtual FindObject(Type objectType, CriteriaOperator criteria, Boolean inTransaction) method. So, you should only override the public virtual BaseObjectSpace.FindObject method to implement an object search.

See Also