返回匿名类的类型是什么

gio301 2010-08-26 12:01:03
public static ????? GetPermissionAndUserList()
{
InfoCollectDBDataContext infoCollectDataContext = new InfoCollectDBDataContext();
var objTemp = (from a in infoCollectDataContext.Ic_Permissions
select new { uid = a.uid, permission_name = a.permission_name }).ToList();
return objTemp;
}



这个返回的类型应该是什么
...全文
705 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
henory_lin 2010-11-07
  • 打赏
  • 举报
回复

public static Dictionary<string,string> GetPermissionAndUserList()
{
InfoCollectDBDataContext infoCollectDataContext = new InfoCollectDBDataContext();
return (from a in infoCollectDataContext.Ic_Permissions
select new { uid = a.uid, permission_name = a.permission_name }).ToDictionary(key=>key.uid,value=>value.permission);
}

一般两个我是这么返回的。
或是 你自己构建一个类

public static List<A> GetPermissionAndUserList()
{
InfoCollectDBDataContext infoCollectDataContext = new InfoCollectDBDataContext();
return (from a in infoCollectDataContext.Ic_Permissions
select new A { uid = a.uid, permission_name = a.permission_name }).ToList<A>();
}

class A
{
属性 uid ,
属性 permission_name
}

都可以
lth_81 2010-10-06
  • 打赏
  • 举报
回复
继续debug的信息:

?employees is System.Collections.IEnumerable
true


?employees.GetType().FullName
"System.Data.Linq.DataQuery`1[[<>f__AnonymousType0`2[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.Int64, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], LinqDemo, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]"
lth_81 2010-10-06
  • 打赏
  • 举报
回复
首先,你返回的肯定不是匿名类型,只是说这个类型是一个匿名类型的集合:
private static IQueryable GetData()
{
OpsConnectorDataContext context = new OpsConnectorDataContext();
var employees = from c in context.Persons where c is Employee select new { Name = c.Name, ID = c.ID };

return employees;
}

debug information:
?employees is IQueryable
true


?employees.Expression
{Table(Person).Where(c => (c Is Employee)).Select(c => new <>f__AnonymousType0`2(Name = c.Name, ID = c.ID))}
Arguments: Count = 2
CanReduce: false
DebugView: ".Call System.Linq.Queryable.Select(\r\n .Call System.Linq.Queryable.Where(\r\n .Constant<System.Data.Linq.Table`1[LinqDemo.Person]>(Table(Person)),\r\n '(.Lambda #Lambda1<System.Func`2[LinqDemo.Person,System.Boolean]>)),\r\n '(.Lambda #Lambda2<System.Func`2[LinqDemo.Person,<>f__AnonymousType0`2[System.String,System.Int64]]>))\r\n\r\n.Lambda #Lambda1<System.Func`2[LinqDemo.Person,System.Boolean]>(LinqDemo.Person $c) {\r\n $c .Is LinqDemo.Employee\r\n}\r\n\r\n.Lambda #Lambda2<System.Func`2[LinqDemo.Person,<>f__AnonymousType0`2[System.String,System.Int64]]>(LinqDemo.Person $c) {\r\n .New <>f__AnonymousType0`2[System.String,System.Int64](\r\n $c.Name,\r\n $c.ID)\r\n}"
Method: {System.Linq.IQueryable`1[<>f__AnonymousType0`2[System.String,System.Int64]] Select[Person,<>f__AnonymousType0`2](System.Linq.IQueryable`1[LinqDemo.Person], System.Linq.Expressions.Expression`1[System.Func`2[LinqDemo.Person,<>f__AnonymousType0`2[System.String,System.Int64]]])}
NodeType: Call
Object: null
Type: {Name = "IQueryable`1" FullName = "System.Linq.IQueryable`1[[<>f__AnonymousType0`2[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.Int64, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], LinqDemo, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]"}
JeffChung 2010-10-04
  • 打赏
  • 举报
回复
IQueryable<int,string>
IEnumable<int,string>
List<int,string>
lxibon 2010-09-28
  • 打赏
  • 举报
回复
iqueryable
哥子谭 2010-09-18
  • 打赏
  • 举报
回复
返回IQueryable或者自己定义一个类,包含
uid, permission_name的实体类
光脚丫思考 2010-09-18
  • 打赏
  • 举报
回复
应该说LINQ to SQL是有逻辑层和数据访问层的。这个数据访问层如今已经不用我们关心了,这件事情LINQ to SQL会很好的进行处理的。至于逻辑层,其实就是那个对象模型了,在这个模型中,将业务逻辑编写进去,完全是可以的,而且也是相当不错的做法。这样反而省事多了!免得,本来的重点就是业务逻辑,还不得不去考虑数据访问的问题。
g_lbz 2010-09-02
  • 打赏
  • 举报
回复
“这样我感觉就像过去以业务为实体店Entity层,每个访问数据层返回的结果都是一个Class。
然后前台可对这个entity操作。
那在Ling to sql这种访问模式中也无需要有这样一个entity层?就是也需要有一个entity贯穿data,bussiness,和表现层中作为数据实体的载体用?”
/////////////////////////////////
实体层还是需要的,除非楼主使用LinqToSql中的映射实体作为系统中的实体。
那样的话方法只需要返回一个IQuery<T>接口,在方法中并不需要读取字段,仅在使用的时候读取出来需要的字段,因为IQueryable<T>是延迟加载的,效率上应该是一样的。

public static IQueryable<Ic_Permissions> GetPermissionAndUserList()
{
InfoCollectDBDataContext infoCollectDataContext = new InfoCollectDBDataContext();
var objTemp = from a in infoCollectDataContext.Ic_Permissions
select a;
return objTemp;
}

在调用的时候直接读取需要的字段。
光脚丫思考 2010-08-31
  • 打赏
  • 举报
回复
public static ????? GetPermissionAndUserList()
{
InfoCollectDBDataContext infoCollectDataContext = new InfoCollectDBDataContext();
var objTemp = (from a in infoCollectDataContext.Ic_Permissions
select new { uid = a.uid, permission_name = a.permission_name }).ToList();
return objTemp;
}

你这个代码返回的是具有uid和permisssion_name两个属性的匿名类型。
其实你现在的问题根本不需要进行转换,你所返回的这个结果,也就是ToList<TEntity>()。你使用那个foreach语句读取这个结果集中的对象去。比如:
foreach(var PUObject in GetPermissionAndUserList())
{
Console.WriteLine(PUObject.uid);
Console.WriteLine(PUObject.permission_name);
}


编译器会自动推断出PUObject这个迭代变量的类型,也就是那个匿名类型的对象。智能提示也会列出它的2个属性的。这样就可以访问这些匿名类型的对象了。不过你需要使用var这个关键字。-_-

另一种方法就是你创建一个类了。然后再select new 的时候直接给它明确的指出类型。
不过,我觉得你用前面的那个办法就成了。
呵呵,还不知道怎么做的话,再发问吧!
JianKong8023 2010-08-31
  • 打赏
  • 举报
回复
IEnumerable<命名控件.实体类>,IQuaryble<命名控件.实体类>,List<命名控件.实体类>
醉爱 2010-08-30
  • 打赏
  • 举报
回复
private DataTable getdata()
{
var tb=from sco in score
join loc in location on sco.CheckLocationId equals loc.CheckLocationId
join rec in record on sco.CheckRecordId equals rec.RecordId
join usr in user on rec.CheckWorker equals usr.Userid
join dep in dept on sco.DeptId equals dep.DeptId
where (
select new
{
dep.DeptName,
loc.CheckName,
usr.Truename,
sco.Score,
sco.DeductReason,
rec.CheckDate
};
DataTable dt = new DataTable();
dt.Columns.Add("DeptName", typeof(string));
dt.Columns.Add("CheckLocationName", typeof(string));
dt.Columns.Add("Truename", typeof(string));
dt.Columns.Add("Score", typeof(Decimal));
dt.Columns.Add("DeductReason", typeof(string));
dt.Columns.Add("CheckDate", typeof(DateTime));
foreach (var item in tb.OrderBy(p=>p.DeptName))
{
dt.Rows.Add(new object[] { item.DeptName, item.CheckLocationName, item.Truename, item.Score, item.DeductReason, item.CheckDate });
}
return dt;
}
你可以参考一下,转成DataTable
刀枪blue 2010-08-30
  • 打赏
  • 举报
回复
IQuaryble<>
哥子谭 2010-08-28
  • 打赏
  • 举报
回复
返回类型是IQuaryble
gio301 2010-08-26
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 peter200694013 的回复:]

public static Array GetPermissionAndUserList()
{
InfoCollectDBDataContext infoCollectDataContext = new InfoCollectDBDataContext();
var objTemp = (from a in infoColl……
[/Quote]但是作为Array返回时到了前台就没的操作了,点不出任何的属性出来
Peter200694013 2010-08-26
  • 打赏
  • 举报
回复
public static Array GetPermissionAndUserList()
{
InfoCollectDBDataContext infoCollectDataContext = new InfoCollectDBDataContext();
var objTemp = (from a in infoCollectDataContext.Ic_Permissions
select new { uid = a.uid, permission_name = a.permission_name });
return objTemp.ToArray();
}
wanghui0380 2010-08-26
  • 打赏
  • 举报
回复
object
gio301 2010-08-26
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 sp1234 的回复:]

自己定义一个class,然后认真使用类型地去写代码:

public static MyResultClass GetPermissionAndUserList()
{
........
var objTemp = (from a in infoCollectDataContext.Ic_Permissions
……
[/Quote]
这样我感觉就像过去以业务为实体店Entity层,每个访问数据层返回的结果都是一个Class。
然后前台可对这个entity操作。
那在Ling to sql这种访问模式中也无需要有这样一个entity层?就是也需要有一个entity贯穿data,bussiness,和表现层中作为数据实体的载体用?
Peter200694013 2010-08-26
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 gio301 的回复:]
引用 2 楼 peter200694013 的回复:

public static Array GetPermissionAndUserList()
{
InfoCollectDBDataContext infoCollectDataContext = new InfoCollectDBDataContext();
var objTemp = (from a in infoColl……
……
[/Quote]
eg:

public static Array F()
{
int[] arr = { 1, 2, 3 };

var v = from a in arr select new { a1 = a, a2 = a + 1 };

return v.ToArray();

}

static void Main(string[] args)
{



Array arr = F();

foreach (object o in arr)
Console.WriteLine(o);
}
  • 打赏
  • 举报
回复
自己定义一个class,然后认真使用类型地去写代码:

public static MyResultClass GetPermissionAndUserList()
{
........
var objTemp = (from a in infoCollectDataContext.Ic_Permissions
select new MyResultClass { .....
gio301 2010-08-26
  • 打赏
  • 举报
回复 1
有没有人有有更好的意见?或者,你们工作中是如何实现的?
该课程由付强老师主讲,系统的、全面的、具体的讲解了java入门的知识。可以使初级的学员入门。Java入门Java的历史、Java的版本、Java的优势、软件行业前景Java开发环境搭建、编写Java入门练习虚拟机的运行机制、Java的平台无关性、虚拟机垃圾回收机制基础语法关键字、标识符、Java数据类型分类、基础数据类型、取值范围变量、常量、三种注释、生成doc文档、运算符、表达式if语句、switch语句、嵌套判断for语句、while语句、do-while语句、嵌套循环类和对象面向过程和面向对象的区别类的构成、访问修饰符、对象的内存分配this关键字、按值传递与按引用传递、对象的初始化顺序高级类特性类的继承、父子类的初始化顺序、单继承性方法的覆盖、重载、super关键字、多态、instanceof关键字、强制类型转换、static关键字、final关键字数组和枚举一维数组的应用及内存分配多维数组的应用及内存分配数组的复制、数组的按引用传递排序算法:冒泡、直接选择、插入选择、希尔、快速、归并、堆排序Arrays工具类的应用枚举类型的应用常见类的使用Object类的底层及应用、Objects类String类的底层及应用、正则表达式StringBuffer和StringBuilder的底层及应用Math类的应用、包装类的应用日期类的应用:Date、DateFormat、Calendar、LocalDateTime、Instant、LocalDate、MonthDay、ZonedDateTime、YearMonth、新旧日期转换BigInteger和BingDecimal、DecimalFormatSystem类、Scanner类抽象类和接口抽象类的规则及应用接口的规则及应用默认方法、静态方法、函数式接口、Lambda表达式异常异常的定义异常的处理:抓(try-catch-finally)、抛(throws)异常的分类、自定义异常的应用、throw关键字集合框架集合框架结构:接口、实现类Collection接口的方法、Set接口的方法、List接口的方法、Map接口的方法Array、Linked、Hash、Tree底层实现原理泛型的作用、Collections工具类、历史集合类I/O流Path类的原理及应用、Files类的原理及应用文件字节流FileInputStream的原理及应用对象类、缓冲流、数据流的原理及应用字符流的原理及应用多线程进程与线程的概念、查看线程对象Java内存模型线程的创建与启动:扩展Thread类、实现Runnable接口、实现Callable接口、线程池线程状态的转换:新建、就绪、运行、阻塞、死亡线程的调度:sleep、yield、join、interrupt、wait后台线程、定时任务线程的并发与同步、同步锁、同步块、线程安全的类Lock接口、CAS、volatile修饰符内部类成员内部类、本地内部类的应用匿名内部类的原理及引用、Lambda表达式设计模式基础设计模式概念、框架概念7大设计原则:开闭原则、依赖倒置原则、单一职责原则、接口隔离原则、迪米特原则、里氏替换原则、合成复用原则单例模式、工厂模式、模板模式、代理模式、装饰模式、适配器模式、外观模式、策略模式、观察者模式、命令模式、备忘录模式、观察者模式反射反射包Class类的使用反射获取类属性、方法、构造器通过反射创建类对象/通过反射调用方法反射的应用

8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧