『壹』 linq groupby動態分組 ,比如根據用戶選擇的產品型號,產品分類,入庫倉庫進行動太分組
var q =
from p in 表
group p by p.要分組的欄位 into g
where 加條件,要什麼自己加
select new {
g.Key,
NumProcts = g.Count() //求數量,或求和都可以
};
『貳』 linq to sql類可以動態創建嗎
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Xml.Linq;
using System.Data.Linq.Mapping;
using System.Data.Linq;
using System.Data.SqlClient;
[Table(Name = "student")]
public class Student
{
//如果資料庫欄位名,和Name指定的一樣,可以不用寫Name屬性
//類型和資料庫欄位類型,請保持一致
[Column(IsPrimaryKey = true, Name = "ID")]
public int ID { get; set; }
[Column(Name = "Name")]
public string Name { get; set; }
[Column(Name = "Sex")]
public string Sex { get; set; }
[Column(Name = "Age")]
public byte Age { get; set; }
[Column(Name = "Address")]
public string Address { get; set; }
}
public void ToSql1()
{
string connectsql = "server=.\\SQLEXPRESS;database=test;uid=zy;pwd=zy;";//sql 驗證
string connectwin = "server=.\\sqlexpress;database=test;integrated security=true;";//windows 驗證
DataContext d = new DataContext(connectwin);
Table<Student> std = d.GetTable<Student>();
//根據地區分組查詢
var val = from s in std group s by s.Address into g select g;
foreach (var s in val)
{
txtPrint.AppendText(s.First().Address, ":");
foreach (var s1 in s)
{
txtPrint.AppendText(s1.Name, new string[] { s1.Sex, s1.Age.S() });
}
txtPrint.AppendText("\r\n");
}
}
『叄』 sql語句中的groupby是什麼意思
一、sql語句中的groupby是:GROUP BY 語句用於結合合計函數,根據一個或多個列對結果集進行分組。
二、sql語句group by的高級語法:
1、寫上一個創建表的 sql語句. 當然,我們也可以用設計圖創建;
『肆』 求總結linq與sql語法比較
linq是面向對象的sql。也就是說,sql是向關系型資料庫的查詢,而linq實際上是對內存里的數據的查詢。
雖然linq原來是對象查詢,但經過ms的努力,可以通過表達式分析與實體到關系的映射(linq to sql),把linq轉換為sql語句或是對xml的查詢(linq to xml)。
因此,這種技術就成了對象到資料庫記錄的一個方便的映射、轉化與操作的工具,你再也不必去去根據不同的情況用字元串拼接的辦法生成sql,而是專心於對象模型的處理即可,你對於對象的修改最終都會被轉換為對應的update, insert, delete等sql語句,在你submit時全部提交到資料庫中。
綜爾言之,linq to sql是一個資料庫到對象結構的一個中間層, 他把對關系數據的管理轉變為對象的操作,屏蔽了麻煩的sql,而且,還可以得到vs強大的智能感知功能的幫助。
LINQ,語言集成查詢(Language INtegrated Query)是一組用於c#和Visual Basic語言的擴展。它允許編寫C#或者Visual Basic代碼以查詢資料庫相同的方式操作內存數據。
基本概念
從技術角度而言,LINQ定義了大約40個查詢操作符,如select、from、in、where以及orderby(C#)中。試用這些操作可以編寫查詢語句。不過,這些查詢還可以基於很多類型的數據,每個數據類型都需要一個單獨的LINQ類型。 經過了最近 20 年,面向對象編程技術( object-oriented (OO) programming technologies )在工業領域的應用已經進入了一個穩定的發展階段。程序員現在都已經認同像 類(classes)、對象(objects)、方法(methods)這樣的語言特性。考察現在和下一代的技術,一個新的編程技術的重大挑戰開始呈現出來,即面向對象技術誕生以來並沒有解決降低訪問和整合信息數據( accessing and integrating information )的復雜度的問題。其中兩個最主要訪問的數據源與資料庫( database )和 XML 相關。 LINQ 提供了一條更常規的途徑即給 .Net Framework 添加一些可以應用於所有信息源( all sources of information )的具有多種用途( general-purpose )的語法查詢特性( query facilities ),這是比向開發語言和運行時( runtime )添加一些關系數據( relational )特性或者類似 XML 特性( XML-specific )更好的方式。這些語法特性就叫做 .NET Language Integrated Query (LINQ) 。 包含 DLinq 和 XLinq
基礎知識
1. LINQ的讀法:(1)lin k (2)lin q 2. LINQ的關鍵詞:from, select, in, where, group by, order by … 3. LINQ的注意點:必須以select或者是group by 結束。 4. LINQ的語義: from 臨時變數 in 集合對象或資料庫對象 where 條件表達式 [order by條件] select 臨時變數中被查詢的值 [group by 條件] LINQ的查詢返回值的類型是臨時變數的類型,可能是一個對象也可能是一個集合。並且LINQ的查詢表達式是在最近一次創建對象時才被編譯的。LINQ的查詢一般跟var關鍵字一起聯用 (什麼是var?匿名對象) 。 5. LINQ的全稱:Language-Integrated Query 6. LINQ的分類:LINQ to Object, LINQ to XML, LINQ to SQL, LINQ to ADO.NET 7. 命名空間:System.Linq; 注意:Linq是在.NET Framework 3.5 中出現的技術,所以在創建新項目的時候必須要選3.5或者更高版本,否則無法使用。 選擇3.5或更高版本的.NET Framework之後,創建的新項目中會自動包含System.Linq的命名空間。
語法實例
C#3.0 LINQ 查詢語法 首先來看一個很簡單的LINQ查詢例子,查詢一個int 數組中小於5的數字,並按照大小順序排列: class Program { static void Main(string[] args) { int[] arr = new int[] { 8, 5, 89, 3, 56, 4, 1, 58 }; var m = from n in arr where n < 5 orderby n select n; foreach (var n in m) { Console.WriteLine(n); } Console.ReadLine(); } } 上述代碼除了LINQ查詢語法外,其他都是我們所熟悉的語法,而LINQ查詢語法跟SQL查詢語法很相似,除了先後順序。 Q:為何 LINQ 查詢語法是以 from 關鍵字開頭的,而不是以 select 關鍵字開頭的?select 開頭這種寫法跟SQL的寫法更接近,更易懂呀? A:簡單來說,為了IDE的智能感知(Intelisence)這個功能,select 關鍵字放在後面了。 編程語言以 select 開頭寫LINQ查詢語法不是沒出現過,你如果使用過2005年的VB9 CTP 版本,那時候VB9的LINQ查詢語法就是 select 關鍵字在前面,但是 select 關鍵字在前面,在做智能感知(Intelisence)時候就很頭大。經過微軟IDE組的權衡,確定了把 from 關鍵字放在最前面。 那時候 VB9 LINQ的查詢語法還是 select 參數在最前面。不過後來 VB9 測試版改成了跟 C# 一樣的做法, from 關鍵字放在最前面了。 更詳細的解釋,來自裝配腦袋 假設你要書寫這樣的代碼:Select p.Name, p.Age From p In persons Where xxx ,代碼是一個個字元輸入的。 我們在寫到 p in persons 之前,p 的類型是無法推測的,所以寫 Select p. 的時候,Name之類的屬性不會彈出智能提示來。 這樣就需要先去寫 From 這句,再回來寫 Select。 微軟IDE組經過反復考慮決定,還不如就把 Select 寫到後面了。於是編程語言中的寫法就確定這樣來寫了。 VB9 的這個變化可以參看這篇博客: Select/From vs. From/Select revisited... 我們再來看一個稍稍復雜的LINQ查詢: 在我們羅列的語言字元串中,我們希望按照字元長短,分類羅列出來,實現代碼如下: static void Main(string[] args) { string [] languages = {"Java","C#","C++","Delphi","VB.net","VC.net","C++ Builder","Kylix","Perl","Python"}; var query = from item in languages orderby item group item by item.Length into lengthGroups orderby lengthGroups.Key descending select lengthGroups; foreach (var item in query) { Console.WriteLine("strings of length {0}",item.Key); foreach (var val in item) { Console.WriteLine(val); } } Console.ReadLine(); } 其中的 into 關鍵字表示 將前一個查詢的結果視為後續查詢的生成器,這里是跟 group by 一起使用的。 LINQ中的Group by不要跟 SQL 中的Group by 混淆,SQL 由於是二維結構,Group by 的一些邏輯受二維結構的約束,無法像 LINQ 中的Group by 這么靈活。
Linq的內部執行原理淺析
LINQ(Language Integrated Query)是Visual Studio 2008中的領軍人物。藉助於LINQ技術,我們可以使用一種類似SQL的語法來查詢任何形式的數據。目前為止LINQ所支持的數據源有SQL Server、XML以及內存中的數據集合。開發人員也可以使用其提供的擴展框架添加更多的數據源,例如MySQL、Amazon甚至是Google Desktop。 一般來講,這類查詢語句的一個重要特點就是可以並行化執行。雖然有些情況下並行可能會帶來一些問題,但這種情況非常少見。這樣也就水到渠成地引出了PLINQ這個並行處理的LINQ類庫。 PLINQ原名為Parallel LINQ,支持XML和內存中的數據集合。執行於遠程伺服器上的查詢語句(例如LINQ to SQL)顯然無法實現這個功能。 將LINQ語句轉換為PLINQ語句極為簡單——只需要在查詢語句中From子句所指定的數據源的最後添加.AsParallel()即可。隨後Where、OrderBy和Select子句將自動改為調用這個並行的LINQ版本。 據MSDN Magazine介紹,PLINQ可以以三種方式執行。第一種是管道處理:一個線程用來讀取數據源,而其他的線程則用來處理查詢語句,二者同步進行——雖然這個單一的消費線程可能並不那麼容易與多個生產線程同步。不過若是能夠仔細配置好負載平衡的話,仍然會極大地減少內存佔用。 第二種模式叫做「stop and go」,用於處理結果集需要被一次返回時(例如調用ToList、ToArray或對結果排序)的情況。在這種模式下,將依次完成各個處理過程,並將結果統一返回給消費線程。這個模式在性能上將優於第一種模式,因為它省去了用來保持線程同步所花費的開銷。 最後一種方法叫做「inverted enumeration」。該方法並不需要實現收集到所有的輸出,然後在單一的線程中處理,而是將最終調用的函數通過ForAll擴展傳遞到每個線程中。這是目前為止最快的一種處理模式,不過這需要傳遞到ForAll中的函數是線程安全的,且最好不包含任何lock之類的互斥語句。 若是PLINQ中任意的一個線程拋出異常,那麼所有的其他線程將會被終止。若是拋出了多個異常,那麼這些異常將被組合成一個MultipleFailuresException類型的異常,但每個異常的調用堆棧仍會被保留。 關於LINQ的技巧從大的方面來看它能給開發團隊帶來的好處: 1、無需復雜學習過程即可上手 2、編寫更少代碼即可創建完整應用。 3、更快開發錯誤更少的應用程序。 4、無需求助奇怪的編程技巧就可合並數據源。 5、讓新開發者開發效率更高。
『伍』 linq 左連接並group by,請問該怎麼寫
linq 中group by的具體用法如下:
1.計數
語句描述:Linq使用Group By和Count得到每個CategoryID中產品的數量。
說明:先按CategoryID歸類,取出CategoryID值和各個分類產品的數量。
2.帶條件計數
語句描述:Linq使用Group By和Count得到每個CategoryID中斷貨產品的數量。
說明:先按CategoryID歸類,取出CategoryID值和各個分類產品的斷貨數量。 Count函數里,使用了Lambda表達式,Lambda表達式中的p,代表這個組里的一個元素或對象,即某一個產品。
3.Where限制
語句描述:根據產品的―ID分組,查詢產品數量大於10的ID和產品數量。這個示例在Group By子句後使用Where子句查找所有至少有10種產品的類別。
說明:在翻譯成SQL語句時,在最外層嵌套了Where條件。
4.多列(Multiple Columns)
『陸』 sql語句中的group by什麼意思
一、sql語句中的groupby是:GROUP
BY
語句用於結合合計函數,根據一個或多個列對結果集進行分組。
二、sql語句group
by的高級語法:
1、寫上一個創建表的
sql語句.
當然,我們也可以用設計圖創建;
2、select
*
from
student,我們輸入一條查詢語句,顯示出我們剛剛插入的所有數據;
3、select
stuname,COUNT(*)
from
student
group
by
stuname。從上面的結果我們不難看出,我們根據學生姓名進行了分組,另一種說法其實就是把重復的過濾了,把學生表中的姓名那一列用group
by分組,並且利用聚合函數(count) 統計每個姓名出現的次數。
Sql語句中有很多技巧,一般除了我們初學時的增刪改查,還有其他很多。安裝的時候也一定要記得看一下自己的操作系統是多少位.你是32位操作系統的就安裝32位的Sqlserver
版本不限制,2005、2012都可以。
『柒』 請教一個 LINQ TO SQL 的GROUP BY 問題
用一個新變數賦值就好了,你這GroupBy前後的數據類型是不一樣的
『捌』 linq to sql左連接沒有效果
真夠復雜的,不過你沒用ef嗎?ef的導航屬性查詢可以代替join,方便的多。
『玖』 linq 中如何group by sum怎麼寫
SQL:select * from A,B where A.cpID=B.cpID and A.cbID=B.cbID
LINQ:var p = from t1 in a
from t2 in b
from t3 in c
where t1.cpid equal t2.cpid and t1.cbid equal t3.cbid
select new
{
t1,
t2.cpid
}
linq 也能實現 sum、groupby 的效果的,網路上很多介紹,去看看就明白了,不過還是推薦做視圖來處理
『拾』 求助!! linq to sql 和lambda表達式的轉變。
轉的具體代碼受限於你的上下文,因此是不可能給你寫出來你直接運行的。但原則都是相同的。要用到的有join,匿名類型(select的那些),entitiyfunction(如果你用entitiy framework)或者sqlmethods(如果你用了linq to sql)。