zoukankan      html  css  js  c++  java
  • 基于EF(Entity Framework)的分层系统中如何传递查询的结果集

    接触EF快两个月了,期间知道了什么是LINQ,也接触了不少c#3.0的新语法。

    当然,也碰到了不少问题。。。

    先来看一段代码

    linq 
    var result = from p in Database.StockDS
    group p by p.ToModelnumber into g
                  //......以下省略

    这是一句简单的LINQ查询语句,起初见到这样的代码时,我所想到的仅仅是,result的类型是由等号右边的查询语句决定的。 而当我需要将这个查询结果,即result的值作为函数的返回值时,我突然意识到一个问题,我该用什么返回类型呢?

    我感到无从下手,想了半天我决定执行程序,并且在这句代码前面打上断点,看看这句代码执行后VS是否会告诉我result到底是什么类型,但是很可惜,VS只告诉我它是匿名的。

    再次思考,又想了半天我想到了将result转化成object类型传递,因为我需要将取得的数据绑定至GridView控件,而GridView内部又有强大的反射机制,那么即使我装了箱之后拆不了,GridView也许仍然能够绑定,但是很可惜,GridView表示它也无能为力。很显然我误解了反射。。。

    再次思考,又想了半天我决定看看这个匿名类到底是个什么东东。

    这次我得到了一些信息:

    匿名类型只能作为局部变量存在,并且在在其作用范围之外,编译器无法得知其类型

    (回忆的,记不清了,不过大致就是这个意思)

    后半句是关键,不过可惜直到我注意到LINQ中的Cast函数后才意识到强制转换这点上,解决方法也因为有了这个正确的关键词才搜到

      

       

    下面给出个简单的例子:

     

    public interface IStockStatistics
    {
    IT_Modelnumber ModelNumber {
    get; set; }
    int TotalAmount { get; set ;}
    }
    public class StockStatistics:IStockStatistics
    {
    private int _id;
    private IT_Modelnumber _model;
    private int _amount;

    public int Id
    {
    get{return _id ;}
    set{_id =value ;}
    }
    public IT_Modelnumber ModelNumber
    {
    get { return _model; }
    set { _model = value; }
    }
    public int TotalAmount
    {
    get { return _amount; }
    set { _amount = value; }
    }
    }
    1 public ICollection<IStockStatistics > GetStatistics()
    2 {
    3 var result = from p in Database.StockDS
    4 group p by p.ToModelnumber into g
    5 select new StockStatistics
    6 {
    7 Id = g.Key.Id,
    8 ModelNumber = g.Key,
    9 TotalAmount = g.Sum(p => p.Amount)
    10 };
    11 return result.AsEnumerable().Cast<IStockStatistics>().ToList().AsReadOnly();
    12 }

     简单的说这个方法就是将原本匿名的类型转换成我们已知的类型,但这个类型不存在,所以需要我们先进行定义。

    select new StockStatistics :new 后面的类型有些资料中省略了,但我在自己的环境中省略后编译没有通过。

  • 相关阅读:
    webservice调用三种方式
    webservice访问权限控制利用TOMCAT用户
    ubuntu添加ppa源
    win7与ubuntu共享文件夹
    Cinema 4D* 中令人惊叹的体积效果
    线程并行化的概念及其用法
    什么是代码现代化?
    英特尔® 软件开发人员十大故事 | 五月
    英特尔® 实感™ 前置摄像头 SR300 和 F200 的比较
    面向英特尔® x86 平台的 Unity* 优化指南: 第 1 部分
  • 原文地址:https://www.cnblogs.com/xxfss2/p/1763970.html
Copyright © 2011-2022 走看看