我正在制作一个项目,我在项目中收到Anonymous Type的错误。问题是如何从其他类如函数中获取和使用匿名类型。
public IList GetReferenceList()
{
var result = from r in entity.Reference
join d in entity.Reference_Detail on r.id equals d.refid
select new { ID = d.id, REFNAME = r.Name, DETAIL=d.Name };
return result.ToList();
}
问题在这里。我该怎么写这个函数的返回类型,我想在foreach中使用。
private void Form1_Load(object sender, EventArgs e)
{
var data = GetReferenceList();
foreach(var item in data)
{
//I didn't use field in here.
}
}
我不想创建这样的类,并使用该类。
public class MyList()
{
public int ID { get; set; }
public string REFNAME { get; set; }
public string DETAIL { get; set; }
}
public List<MyList> GetReferenceList()
{
var result = from r in entity.Reference
join d in entity.Reference_Detail on r.id equals d.refid
select new MyList { ID = d.id, REFNAME = r.Name, DETAIL=d.Name };
return result.ToList();
}
private void Form1_Load(object sender, EventArgs e)
{
List<MyList> data = GetReferenceList();
foreach(MyList item in data)
{
//I can use field in here.
}
}
我有100个这样的查询。如果我这样做,将是100级查询。
请帮助我。
答案 0 :(得分:1)
我不是说你应该这样做,相反,但你可以使用动态来返回匿名类型并在以后解决它们的属性:
public IEnumerable<dynamic> GetReferenceList()
{
return from r in entity.Reference
join d in entity.Reference_Detail on r.id equals d.refid
select new { ID = d.id, REFNAME = r.Name, DETAIL = d.Name };
}
在消费代码中:
var data = GetReferenceList();
foreach (var item in data)
{
var name = (string)(item.REFNAME);
...
}
你很快就会开始讨厌这种方法。您将继续将动态类型转换为运行时类型,您将没有智能感知(在这种情况下在item.
上),您将不会进行编译时检查,因此它容易出错且易受各种影响微妙的错误。帮自己一个忙,并使用命名类型。