c# 和 LINQ,其中集合成员的属性名称是通过函数传递的

标签 c# linq generics parameters

一如既往,帮助/评论想法总是受到赞赏,并为我的编程幼稚表示歉意。

我正在尝试创建一个广泛适用的函数,该函数可用于涉及 block 随机化的 future 研究。 patientDataCollection 的每个成员都有一个 bool 属性,名称类似于 interventionArm、givenDrugX 或类似名称。该函数旨在(伪)随机分配给研究的一个分支,具体取决于 block 大小——也就是说,如果 block 大小为 8,则将 4 个分配给治疗,4 个分配给对照(无治疗)。

到目前为止的代码:

 public static bool nextAllocation<T>(int blockSize, IEnumerable<T> patientDataCollection, string allocationPropertyName)
 {
    int remainingAllocations = blockSize - patientDataCollection.Count();
    if (remainingAllocations <= 0) throw new Exception("All alocations within block accounted for");
    var p = typeof(T).GetProperty(allocationPropertyName);

    int remainingInterventions = blockSize/2 - patientDataCollection.Count(c => c.p);
    double Pintervention = (double)remainingInterventions / (double)remainingAllocations;
    double rdm = new Random().NextDouble();
    return (rdm <= Pintervention);
 }

这当然是有缺陷的逻辑,因为变量 p 与 linq 语句 patientDataCollection.Count(c => c.p) 中引用的 c.p 无关。显然这个语句只是统计所有具有真值的元素。

ASP 为 4.0。任何人都可以看到如何实现这一点

最佳答案

您可以将 Func<T, bool> 传递给您的方法将用于计数。

public static bool nextAllocation<T>(int blockSize, IEnumerable<T> patientDataCollection, Func<T,bool> predicate) 
{ 
    int remainingAllocations = blockSize - patientDataCollection.Count(); 
    if (remainingAllocations == 0) throw new Exception("All alocations within block accounted for"); 
    int remainingInterventions = blockSize/2 - patientDataCollection.Count(predicate); 
    double Pintervention = remainingInterventions / remainingAllocations; 
    double rdm = new Random().NextDouble(); 
    return (rdm <= Pintervention); 
}

用法示例如下:

var result = nextAllocation(10, collection, c=>c.interventionArm);

关于c# 和 LINQ,其中集合成员的属性名称是通过函数传递的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11255206/

相关文章:

c# - 使用动态数据结构构建 OData EF 模型

c# - C#/WinRT 中的全局状态对象

c# - 我想用 C# 中的 DateTimePicker 对象更新数据库表中数据类型为 "Datetime"的字段

c# - 为什么带约束的通用扩展方法不被识别为扩展方法?

c# - 允许从接口(interface)转换为实现的通用约束

java - 关于 AsyncTask 中 Java 泛型的问题

c# - 如何从注册表中获取key的默认值

c# - 如何在 "WHERE"条件下使用 List 编写 LINQ to Entities 查询

c# - 在 Linq 谓词中,编译器会优化对 Enumerable.Min() 的 "scalar"调用还是会为每个项目调用它?

c# - linq Group By 并获取第一个和最后一个记录