使用匿名类型从 LINQ 到 SQL
Using Anonymous Type from LINQ to SQL
我正在制作一个项目,但在项目中出现匿名类型错误。问题是如何从其他 class 函数中获取和使用匿名类型。
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();
}
问题就在这里。这个函数应该写什么return类型,我想在foreach中使用。
private void Form1_Load(object sender, EventArgs e)
{
var data = GetReferenceList();
foreach(var item in data)
{
//I didn't use field in here.
}
}
我不想做那样的 class,使用 class。
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 class 用于查询。
请帮帮我。
相反,我不是说你应该这样做,但是你可以使用动态return匿名类型并稍后处理它们的属性:
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.
上),你不会有编译时检查,所以它容易出错并且容易受到各种影响细微的错误。帮自己一个忙,使用命名类型。
我正在制作一个项目,但在项目中出现匿名类型错误。问题是如何从其他 class 函数中获取和使用匿名类型。
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();
}
问题就在这里。这个函数应该写什么return类型,我想在foreach中使用。
private void Form1_Load(object sender, EventArgs e)
{
var data = GetReferenceList();
foreach(var item in data)
{
//I didn't use field in here.
}
}
我不想做那样的 class,使用 class。
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 class 用于查询。
请帮帮我。
相反,我不是说你应该这样做,但是你可以使用动态return匿名类型并稍后处理它们的属性:
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.
上),你不会有编译时检查,所以它容易出错并且容易受到各种影响细微的错误。帮自己一个忙,使用命名类型。