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.1.dll
NuGet Package: DevExpress.ExpressApp
Declaration
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.