匿名类型,取值方法范围 [英] Anonymous type and getting values out side of method scope

查看:219
本文介绍了匿名类型,取值方法范围的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在.net框架4.0中构建一个asp.net网站,我被困在应该调用一个.cs类的方法,并获得查询结果,这里是我的方法调用和方法



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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆