基於EF(Entity Framework)的分層系統中如何傳遞查詢的結果集

來源:互聯網
上載者:User

接觸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 後面的類型有些資料中省略了,但我在自己的環境中省略後編譯沒有通過。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.