我正在从数据库中的表中检索列表:
var dependency = (from ctf in dc.Fields
join ctfd in dc.FieldsDependencies on ctf.id equals ctfd.Fieldid_depend
where ctf.ctid == ctid && ctf.fieldname == fieldname
select ctfd).ToList();
我将此列表作为参数传递给另一个函数:
public void DoYesDeleteDepField<T>(string fieldname, List<T> dep)
如何更改它以便我可以检索ID字段?
但我无法遍历列表并获取depsingle.id字段。
foreach (var depsingle in dep)
{ var depsingleid = depsingle.id //ERROR
.....
答案 0 :(得分:0)
你需要定义什么是T .. public void ...其中T:IHasId 或者在课程级别定义
答案 1 :(得分:0)
它不知道<T>
具有参数.id所以要么强制转换它(如此var a = (int)something or var a = something as int
),要么将其写入List<t>
中不那么通用的东西。例如List<classname>
。
答案 2 :(得分:0)
由于T
可以是{em>任何从int
到MyClass
,所有这些类型上都没有成员id
。因此,您需要一个通用约束来告诉编译器T
可以使用哪些类型,例如:
public void DoYesDeleteDepField<T>(string fieldname, List<T> dep) where T: MyClass
或完全省略泛型,因为只有一种类型可能使术语泛型毫无用处。只需定义一个类,该类可以隐藏连接中的值并将其传递给您的方法:
class MyClass
{
public string Id { get; set; }
// further properties
}
现在从查询中创建这些对象的实例:
var result = (from ctf in dc.Fields
join ctfd in dc.FieldsDependencies on ctf.id equals ctfd.Fieldid_depend
where ctf.ctid == ctid && ctf.fieldname == fieldname
select new MyClass
{
id = ctf.id,
// further properties
}).ToList();
public void DoYesDeleteDepField(string fieldname, List<MyClass> dep)