匿名类型,取值方法范围 [英] Anonymous type and getting values out side of method scope
问题描述
1:方法调用表单aspx.cs页面:
helper cls = new helper );
var query = cls.GetQuery(GroupID,emailCap);
2:助手类中的方法:
public IQueryable< VariablesForIQueryble> GetQuery(int incomingGroupID,int incomingEmailCap)
{
var ctx = new some connection_Connection();
ObjectSet< Members1> member = ctx.Members11;
ObjectSet< groupMember> groupMembers = ctx.groupMembers;
var query =从成员中的m
在g.MemberID中的groupMembers中加入gmMemberID等于gm.MemID
其中(gm.groupID == incomingGroupID)&& (m.EmailCap == incomingEmailCap)
选择新的VariablesForIQueryble(m.MemberID,m.MemberFirst,m.MemberLast,m.MemberEmail,m.ValidEmail,m.EmailCap);
// select new {m.MemberID,m.MemberFirst,m.MemberLast,m.MemberEmail,m.ValidEmail,m.EmailCap};
返回查询;
}
我尝试使用IEnumerable的上述代码,没有任何运气。这是类VariablesForIQueryble的代码:
3:对于匿名类型进行类化,并将其转换为适当的类型:
public class VariablesForIQueryble
{
private int _emailCap;
public int EmailCap
{
get {return _emailCap; }
set {_emailCap = value; }
}`....................................
4:和一个构造函数:
public VariablesForIQueryble(int memberID,string memberFirst,string memberLast,string memberEmail,int?validEmail,int?emailCap)
{
this.EmailCap =(int)emailCap;
.........................
}
我似乎无法获得查询结果,首先它告诉我匿名类型的问题,我读了一个类后:链接文本;现在它告诉我的参数不支持的构造函数。现在我是一个中间开发人员,有一个简单的解决方案,或者我必须把我的查询回到.aspx.cs页面。
使用反射来解决问题:
A:查询,不使用自定义的VariablesForIQueryble类:
//帮助类中的方法
public IEnumerable GetQuery(int incomingGroupID,int incomingEmailCap)
{
var ctx = new some_Connection();
ObjectSet< Members1> member = ctx.Members11;
ObjectSet< groupMember> groupMembers = ctx.groupMembers;
var query = from m in members
join gm in groupMembers on m.MemberID equals gm.MemID
其中((gm.groupID == incomingGroupID)&&( m.EmailCap == incomingEmailCap))// select m;
选择新的{m.MemberID,m.MemberFirst,m.MemberLast,m.MemberEmail,m.ValidEmail,m.EmailCap};
//选择新的VariablesForIQueryble(m.MemberID,m.MemberFirst,m.MemberLast,m.MemberEmail,m.ValidEmail,m.EmailCap);
//列表< object> lst = new List< object>();
// foreach(查询中的var i)
// {
// lst.Add(i.MemberEmail);
//}
// return lst;
// return query.Select(x => new {x.MemberEmail,x.MemberID,x.ValidEmail,x.MemberFirst,x.MemberLast})ToList();
返回查询;
}
B:使用反射捕获对象和转换这些对象的代码
helper cls = new helper();
var query = cls.GetQuery(GroupID,emailCap);
if(query!= null)
{
foreach(查询中的var objRow)
{
System.Type type = objRow .GetType();
int memberId =(int)type.GetProperty(MemberID)。GetValue(objRow,null);
string memberEmail =(string)type.GetProperty(MemberEmail)。GetValue(objRow,null);
}
else
{
其他....
}
I am building an asp.net site in .net framework 4.0, and I am stuck at the method that supposed to call a .cs class and get the query result back here is my method call and method
1: method call form aspx.cs page:
helper cls = new helper();
var query = cls.GetQuery(GroupID,emailCap);
2: Method in helper class:
public IQueryable<VariablesForIQueryble> GetQuery(int incomingGroupID, int incomingEmailCap)
{
var ctx = new some connection_Connection();
ObjectSet<Members1> members = ctx.Members11;
ObjectSet<groupMember> groupMembers = ctx.groupMembers;
var query = from m in members
join gm in groupMembers on m.MemberID equals gm.MemID
where (gm.groupID == incomingGroupID) && (m.EmailCap == incomingEmailCap)
select new VariablesForIQueryble(m.MemberID, m.MemberFirst, m.MemberLast, m.MemberEmail, m.ValidEmail, m.EmailCap);
//select new {m.MemberID, m.MemberFirst, m.MemberLast, m.MemberEmail, m.ValidEmail, m.EmailCap};
return query ;
}
I tried the above code with IEnumerable too without any luck. This is the code for class VariablesForIQueryble:
3:Class it self for taking anonymouse type and cast it to proper types:
public class VariablesForIQueryble
{
private int _emailCap;
public int EmailCap
{
get { return _emailCap; }
set { _emailCap = value; }
}`....................................
4: and a constructor:
public VariablesForIQueryble(int memberID, string memberFirst, string memberLast, string memberEmail, int? validEmail, int? emailCap)
{
this.EmailCap = (int) emailCap;
.........................
}
I can't seem to get the query result back, first it told me anonymous type problem, I made a class after reading this: link text; and now it tells me constructors with parameters not supported. Now I am an intermediate developer, is there an easy solution to this or do I have to take my query back to the .aspx.cs page.
Used reflection to solve the problem:
A: Query, not using custom made "VariablesForIQueryble" class any more:
//Method in helper class
public IEnumerable GetQuery(int incomingGroupID, int incomingEmailCap)
{
var ctx = new some_Connection();
ObjectSet<Members1> members = ctx.Members11;
ObjectSet<groupMember> groupMembers = ctx.groupMembers;
var query = from m in members
join gm in groupMembers on m.MemberID equals gm.MemID
where ((gm.groupID == incomingGroupID) && (m.EmailCap == incomingEmailCap)) //select m;
select new { m.MemberID, m.MemberFirst, m.MemberLast, m.MemberEmail, m.ValidEmail, m.EmailCap };
//select new VariablesForIQueryble (m.MemberID, m.MemberFirst, m.MemberLast, m.MemberEmail, m.ValidEmail, m.EmailCap);
//List<object> lst = new List<object>();
//foreach (var i in query)
//{
// lst.Add(i.MemberEmail);
//}
//return lst;
//return query.Select(x => new{x.MemberEmail,x.MemberID,x.ValidEmail,x.MemberFirst,x.MemberLast}).ToList();
return query;
}
B:Code to catch objects and conversion of those objects using reflection
helper cls = new helper();
var query = cls.GetQuery(GroupID,emailCap);
if (query != null)
{
foreach (var objRow in query)
{
System.Type type = objRow.GetType();
int memberId = (int)type.GetProperty("MemberID").GetValue(objRow, null);
string memberEmail = (string)type.GetProperty("MemberEmail").GetValue(objRow, null);
}
else
{
something else....
}
这篇关于匿名类型,取值方法范围的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!