我从数据库中的一个表中检索一个列表:
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
.....发布于 2017-07-21 13:12:37
你需要定义什么是T。公共空虚..。其中T: IHasId或在类级别定义它
发布于 2017-07-21 13:12:38
它不知道<T>有参数.id,所以要么转换它(比如这个var a = (int)something or var a = something as int),要么把它写到List<t>中不那么通用的东西上。例如List<classname>。
发布于 2017-07-21 13:19:26
因为T可以是任何东西,从int到MyClass,在所有这些类型上都没有一个名为id的成员。因此,您需要一个通用约束,该约束告诉编译器哪些类型可以用于T,例如:
public void DoYesDeleteDepField<T>(string fieldname, List<T> dep) where T: MyClass或者完全省略泛型,因为只有一种类型可以使泛型一词完全无用。只需定义一个类,它将从join中提取值,并将其传递给您的方法:
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)https://stackoverflow.com/questions/45238500
复制相似问题