使用 Lambda 表达式查找具有匹配 ID 的所有对象
Use Lambda expression to find all objects with matching id
我是第一次使用 Lambda 表达式,并试图了解如何执行此操作。我正在遵循此测试文件中已存在的模式,但我的调用有一层额外的复杂性,因为我需要查看每个对象内部 select 所有具有将提供的 id 的对象测试的时间。
myobject.cs
public class myObject
{
public myObject()
{
this.id = Guid.Empty;
this.poolId = Guid.Empty;
this.name = string.Empty;
this.URL = string.Empty;
}
public Guid id { get; set; }
public Guid poolId { get; set; }
public string name { get; set; }
public string URL { get; set; }
}
testfile.cs
Mock<IMyObjectRepository> mock = new Mock<IMyObjectRepository>(MockBehavior.Strict);
List<myObject> objects = new List<myObject>();
mock.Setup(r => r.LoadByPoolId(It.IsAny<Guid>()))
.Returns<IEnumerable<myObject>>(objList => objects.Where(obj => objList.Contains(obj.id));
问题是,这只搜索表面级别的对象,不搜索对象的属性。 select 所有 myObjects
具有匹配 ID 的部分是什么?
存储库界面
public interface IMyObjectRepository
{
void Put(myObject object)
void Delete(Guid appId);
myObject Load(Guid appId)
IEnumerable<myObject> LoadByPoolId(Guid poolId);
}
LINQ 的 Where
方法接受 lambda 表达式,允许您执行任何您希望的检查。编写一个表达式,对您希望包含的行求值为 true,否则为 false。
在你的情况下,表达式将是 o.id == targetGUID
所以只需将它插入 lambda 主体:
var filteredList = list.Where(o => o.id == targetGUID);
使用提供的示例
var mock = new Mock<IMyObjectRepository>();
var objects = new List<myObject>();
//...populate objects
// access invocation arguments when returning a value
mock.Setup(r => r.LoadByPoolId(It.IsAny<Guid>()))
.Returns((Guid arg) => objects.Where(obj => obj.poolId == arg));
在 Returns
表达式中,提供的参数被传递给用于过滤 objects
列表的表达式。
我是第一次使用 Lambda 表达式,并试图了解如何执行此操作。我正在遵循此测试文件中已存在的模式,但我的调用有一层额外的复杂性,因为我需要查看每个对象内部 select 所有具有将提供的 id 的对象测试的时间。
myobject.cs
public class myObject
{
public myObject()
{
this.id = Guid.Empty;
this.poolId = Guid.Empty;
this.name = string.Empty;
this.URL = string.Empty;
}
public Guid id { get; set; }
public Guid poolId { get; set; }
public string name { get; set; }
public string URL { get; set; }
}
testfile.cs
Mock<IMyObjectRepository> mock = new Mock<IMyObjectRepository>(MockBehavior.Strict);
List<myObject> objects = new List<myObject>();
mock.Setup(r => r.LoadByPoolId(It.IsAny<Guid>()))
.Returns<IEnumerable<myObject>>(objList => objects.Where(obj => objList.Contains(obj.id));
问题是,这只搜索表面级别的对象,不搜索对象的属性。 select 所有 myObjects
具有匹配 ID 的部分是什么?
存储库界面
public interface IMyObjectRepository
{
void Put(myObject object)
void Delete(Guid appId);
myObject Load(Guid appId)
IEnumerable<myObject> LoadByPoolId(Guid poolId);
}
LINQ 的 Where
方法接受 lambda 表达式,允许您执行任何您希望的检查。编写一个表达式,对您希望包含的行求值为 true,否则为 false。
在你的情况下,表达式将是 o.id == targetGUID
所以只需将它插入 lambda 主体:
var filteredList = list.Where(o => o.id == targetGUID);
使用提供的示例
var mock = new Mock<IMyObjectRepository>();
var objects = new List<myObject>();
//...populate objects
// access invocation arguments when returning a value
mock.Setup(r => r.LoadByPoolId(It.IsAny<Guid>()))
.Returns((Guid arg) => objects.Where(obj => obj.poolId == arg));
在 Returns
表达式中,提供的参数被传递给用于过滤 objects
列表的表达式。