2018-03-16

泛型:泛型優(yōu)點(diǎn):

1,編譯時(shí)可以保證類型安全。

2,不用做類型轉(zhuǎn)換,獲得一定的性能提升。

泛型約束:

where T:struct :參數(shù)類型是值類型

where T:class :參數(shù)類型是引用類型

where T:new() :參數(shù)類型是要有一個(gè)public的無參構(gòu)造函數(shù)

where T::參數(shù)類型是派生某個(gè)基類where T: :參數(shù)類型要實(shí)現(xiàn)某個(gè)接口

where T:U :這里T和U都是類型參數(shù),T必須是或者派生自U

部分類 partial

public partial class Form1 : Form

匿名函數(shù)類的屬性是只讀的

//聲明擴(kuò)展方法

//擴(kuò)展方法必須是靜態(tài)的,Add有三個(gè)參數(shù)

//this 必須有,string表示我要擴(kuò)展的類型,stringName表示對(duì)象名

//三個(gè)參數(shù)this和擴(kuò)展的類型必不可少,對(duì)象名可以自己隨意取如果需要傳遞參數(shù),//再增加一個(gè)變量即可

public static? string? Add(this string stringName)

IQueryable 延遲加載機(jī)制

ref:傳遞對(duì)實(shí)參的引用,而不是實(shí)參的拷貝(實(shí)參拷貝static void doIncrement( int param)

static void doIncrement(ref int param){

params++;

}

static void Main(){

int arg=42;

doIncrement(ref arg);

cw.w(arg);//output result is 43

}

out:必須在方法內(nèi)部賦值

EF分頁temp = temp.OrderBy(orderbyLambda).Skip((pageIndex - 1) * pageSize).Take(pageSize);

Sqo:

List list=new List(User){new User{Id=1,name="zuoguo",Age=21},new User{Id=2,name="zuoguo3",Age=23}}

list.where(x=>x.Age>=30).select(s=>s.name).toList();

where延遲加載,查詢時(shí)返回是DbQuery對(duì)象,當(dāng)使用他時(shí)才生成sql語句查詢

list.FindAll(x=>x.Age>=30) //立即加載

LinqIEnumerable listDogs=from dog in dogs

新特效可選參數(shù):

注意:1,不能為參數(shù)列表的第一個(gè)參數(shù),位于必選之后

2,必須指定一個(gè)默認(rèn)值而且是常量

public void Say(string name="wanwan",int age=1)

線程:

? ? ①默認(rèn)情況,一個(gè)進(jìn)程只包含一個(gè)線程,從程序的開始到執(zhí)行結(jié)束;

? ? ②線程可以派生自其它線程,所以一個(gè)進(jìn)程可以包含不同狀態(tài)的多個(gè)線程,來執(zhí)行程序的不同部分;

? ? ③一個(gè)進(jìn)程中的多個(gè)線程,將共享該進(jìn)程的資源;

? ? ④系統(tǒng)為處理器執(zhí)行所規(guī)劃的單元是線程,而非進(jìn)程。

EF:ORM框架,基于ADO.net開發(fā)的,用了反射和特性。最終由ADO。net負(fù)責(zé)從數(shù)據(jù)庫中讀取數(shù)據(jù),返回EF

特點(diǎn):支持多中數(shù)據(jù)庫,提高開發(fā)效率

強(qiáng)勁的映射引擎,很好的支持存儲(chǔ)過程

集成于VS,可進(jìn)行可視化操作

能夠與asp。net,wpf wcf 等j進(jìn)行很好的集成。

EF中微軟推薦先查詢后修改

c=db.Customers.where(x=>x.Age>=30).select(s=>s.name).toList();

c.name="tommy"

db.saveChangs();

刪除

Customers u=new Customers(){CustomersID="ZG"}

db.Customers.Attach(u);

db.Customers.remove(u);

db.saveChangs();

分頁:

c=db.Customers.where(x=>x.Age>=30).orderBy(orderBy).Skip()(pageIndex-1)*pageSize).Take(pageSize);

IQueryable和IEnumberable區(qū)別:IEnumberable調(diào)用skip或者Take前數(shù)據(jù)已經(jīng)加載,IQueryable

是延遲加載,IQueryable繼承IEnumberable

創(chuàng)建線程中唯一EF對(duì)象:使用HttpContext對(duì)象,HttpContext就是微軟封裝的一個(gè)線程對(duì)象

1:

OAEntity db=null;

if(HttpContext.Items["db1"]=null)

{

db=new OAEntity();

HttpContext.Items["db1"]=db;

}

else{

db=HttpContext.Items["db1"] as OAEntity ;

}

2:

OAEntity db=CallContext.GetData("DB") as OAEntity;

if(db==null)

{

db=new OAEntity();

CallContext.SetData("DB",db);

}

MVC:-----

View:展示給用戶,cshtml,ASPX,ASCX文件處理視圖的責(zé)任

Model:實(shí)現(xiàn)業(yè)務(wù)邏輯對(duì)實(shí)體類相對(duì)應(yīng)數(shù)據(jù)庫操作。

3層:數(shù)據(jù)訪問層,業(yè)務(wù)邏輯層,表示層。好處分工明細(xì),有利于升級(jí)和維護(hù),壞處帶來一定的性能損失(子程序模塊

未執(zhí)行結(jié)束時(shí),主線程模塊只能處于等待)

MVC好處:便于單元測(cè)試,將代碼與頁面徹底分離

razor:

@:out of//如果不填寫@:,系統(tǒng)會(huì)把out of當(dāng)做C#語句

@using tommy.product //引用命名空間

@model tommy.student[] //引用類

@Html.Raw("

哇哈哈哈

")//輸出是哇哈哈哈

@Html.renderPartial("login")//渲染部分視圖,login是部分視圖名字? @Html.renderPartial("Top",ViewData.Model)

@Html.renderPartial和@Html.Partial區(qū)別在于renderPartial效率高,Partial先緩存@Html.renderPartial和@Html.renderAction:renderPartial直接渲染而renderAction如果要讀取數(shù)據(jù)庫就要他public ActionResult Test(){ViewData["Msg"]="Hello world" return PartialView();}cshtml:@{Html.RenderAction("Test")}

cshtml被訪問時(shí)也編譯成頁面類,繼承WebViewPage,并編譯到此類Execute方法中

在視圖中請(qǐng)求某個(gè)action方法違反了MVC設(shè)計(jì),renderAction會(huì)發(fā)起一個(gè)新request請(qǐng)求

/App_Data 存放私有數(shù)據(jù),例如XML SQLSERVER等

/App_Start? 存放核心配置設(shè)置

路由:它只為片段提取值,從上到下匹配,不會(huì)找最佳匹配值,只會(huì)找最先值

控制器:實(shí)現(xiàn)了IController接口,里面只有Execute方法,RequestContext封裝了當(dāng)前請(qǐng)求和匹配路由信息,控制器不會(huì)渲染視圖

動(dòng)作參數(shù)不允許out和ref,控制器動(dòng)作返回的是ActionResult對(duì)象,然后交給ActionResult對(duì)象中的execute方法中,交給response輸出

ViewResult:默認(rèn)視圖模板

PartialViewResult:默認(rèn)分部視圖模板

RedirectToRouteResult:重定向,根據(jù)路由生成Url

RedirectResult:重定向,特定Url

ContentResult:返回原始的文本數(shù)據(jù)

FileResult:將2進(jìn)制數(shù)據(jù)傳給瀏覽器

JsonResult:Josn格式

JavaScriptResult:

HttpNotFoundResult:返回404--未找到

HttpStatusCodeResult:返回指定的Http碼

EmptyResult:什么不做

return view():返回當(dāng)前請(qǐng)求視圖 return View(“OtherIndex”)return View(“~/views/home”)指定視圖

MVC流程:request--》routing解析--》controllerFactory---》controller--》actionInvoker--》ActionMethod--》response

1,處理未知?jiǎng)幼鳎?如果動(dòng)作調(diào)用器找不到要調(diào)用的動(dòng)作和方法,便從它的InvokeAction方法返回false。這情況下,

controller會(huì)調(diào)用它的handleUnKnownAction方法(404--未找到) protected override void HandleUnknownAction(string actionName)

2,默認(rèn)情況下,控制器支持會(huì)話狀態(tài),它會(huì)銷毀一定內(nèi)存和一些存儲(chǔ)單元空間,使用無會(huì)話可以改善性能.

SessionState(SessionStateBehavior.Disabled)]只會(huì)對(duì)Class有效

SessionStateBehavior.default 默認(rèn)

SessionStateBehavior.required 讀寫會(huì)話狀態(tài)

readOnly 只讀

Disabled 禁用

注意:ViewBag傳遞數(shù)據(jù)不會(huì)受SessionState影響

3,異步控制器public async Taskshow() { string date = await Task.Factory.StartNew(() => { return "sdsdf"; });

? ? ? ? ? ? return View(date);

? ? ? ? }

4,輔助方法#輔助器@helper ListArry(string s){foreach(string s in items){@s}}使用輔助器:@ListArry("xxx")##beginForm():創(chuàng)建表單回傳源動(dòng)作方法beginForm(action,controller):指定動(dòng)作和方法beginForm(action,controller,method):beginForm(action,controller,method,attributes):attributes標(biāo)簽屬性名稱beginForm(action,controller,method,routeValues,attributes):

#輸入輔助器:Html.CheckBox() ......

強(qiáng)類型輔助器:Html.CheckBoxFor(x=>x.isApproved) ......

強(qiáng)類型輔助器可以減少由于輸錯(cuò)屬性名稱而引起的錯(cuò)誤,通常會(huì)使用他

5,Ajax

Ajax.BeginForm("GetPeopleData".....)

Ajax.ActionLink

動(dòng)作檢測(cè)ajax請(qǐng)求:if(Request.IsAjaxRequest())

//是一個(gè)key value 和viewBag差不多,它會(huì)在請(qǐng)求結(jié)束后刪除

TempData["message"] = string.Format("{0}has been saved",product.Name);

ViewBag不能跨請(qǐng)求,所有重定向使用他就沒用了

TempData ViewData ViewBag的區(qū)別:

ViewData是字典類型,viewBag是dynamic(動(dòng)態(tài))型,會(huì)在程序運(yùn)行時(shí)動(dòng)態(tài)解析,viewData是object,需要

自己強(qiáng)轉(zhuǎn)換類型,而ViewBag(只讀get)是dynamic。viewBag其實(shí)是viewData,就說多了層dynamic

TempData用于一個(gè)請(qǐng)求中執(zhí)行多個(gè)action方法之間共享數(shù)據(jù),它的值在取得一次值后被刪除

{viewbag.UserName="小李飛刀";ViewData["uername"]="aaa";TempData["username"]="bbbbb";

Preson p=new Preson{username="ccc"}}

@viewbag.UserName @ViewData["UserName"] @TempData["Username"] @Model.username

結(jié)果是:aaa,aaa,bbbbb,ccc 并非:小李飛刀,aaa,bbbbb,ccc viewBag和viewData本質(zhì)一樣被覆蓋了

通過request獲取url?后面的參數(shù):Request.QueryString["jkt"];

常用模型特效標(biāo)簽

displayName,required,stringLenght(20,MinimumLenght=2),Range:驗(yàn)證字段范圍,RegularExpression:自定義驗(yàn)證規(guī)則

if(ModelState.IsValid){}//判斷是否模型驗(yàn)證

路由:

SEO(Search Engine Optimization):漢譯為搜索引擎優(yōu)化。

一個(gè)友好的SEO,URL不超過3層http://localhost/{分類}/{具體頁}使用默認(rèn)路由{controller}/{action}/{id}會(huì)影響網(wǎng)站SEO

性能優(yōu)化:

1,//? 緩存

? ? ? [OutputCache(Duration =5,VaryByParam ="none")]

? ? ? public ActionResult Index()

? ? ? {

? ? ? ? ? ViewBag.Now = DateTime.Now.ToString();

? ? ? ? ? Response.Cache.SetOmitVaryStar(true);//解決隱藏Bug

2,捆綁技術(shù):捆綁和縮小通過減少對(duì)服務(wù)器的請(qǐng)求數(shù)量并減少所請(qǐng)求資產(chǎn)的大?。ㄈ鏑SS和JavaScript)來縮短加載時(shí)間。目前大多數(shù)主流瀏覽器將每個(gè)主機(jī)名的同時(shí)連接數(shù)量限制為6個(gè)。

//默認(rèn)true


public class BundleConfig {

? ? //RegisterBundles 參數(shù)對(duì)象的 Add 方法添加,該方法的參數(shù)需要一個(gè)ScriptBundle 類 或 StyleBundle 類的實(shí)例對(duì)象。

? ? //腳本文件用的是 ScriptBundle 類,樣式文件用的是 StyleBundle 類,它們的構(gòu)造參數(shù)代表著捆綁在一起的文件的引用。

? ? //Include 方法用于包含具體要捆綁的文件。其中的 {version} 是文件版本的占位符,MVC會(huì)在相應(yīng)的目錄下定位到最新的一個(gè)版本文件。

? ? public static void RegisterBundles(BundleCollection bundles) {

? ? ? ? bundles.Add(new StyleBundle("~/Content/css").Include("~/Content/*.css"));

? ? ? ? bundles.Add(new ScriptBundle("~/bundles/clientfeaturesscripts").Include(

? ? ? ? ? ? "~/Scripts/jquery-{version}.js",

? ? ? ? ? ? "~/Scripts/jquery.validate.js",

? ? ? ? ? ? "~/Scripts/jquery.validate.unobtrusive.js",

? ? ? ? ? ? "~/Scripts/jquery.unobtrusive-ajax.js"));

? ? }

}

方便之二:不用引入一大坨js、css文件,而是通過下列優(yōu)雅的方式進(jìn)行: @Scripts.Render("~/bundles/clientfeaturesscripts")

? @RenderBody()

3,移除視圖引擎private void RemoveWebFormEngines() { var viewEngines=ViewEngines.Engines;//獲取引擎集合 var webFormViewEngines=viewEngines.OfType().FirstOrDefault();//拿到WebForm引擎

? ? ? ? ? if (webFormViewEngines!=null)

? ? ? ? ? {

? ? ? ? ? ? ? viewEngines.Remove(webFormViewEngines);

? ? ? ? ? }

? ? ? }

? ? protected void Application_Start()

? ? ? ? ? {

? ? ? ? ? ? ? RemoveWebFormEngines();//調(diào)用它

4, MvcHandler.DisableMvcResponseHeader = true;//隱藏MVC版本

測(cè)試框架:A/A/A 準(zhǔn)備/動(dòng)作/斷言

//動(dòng)作

var result = target.ValueProducts(products);

//斷言

//Assert.AreEqual(goTotal, result);

Assert.AreEqual(products.Sum(e => e.Price), result);

SQL:

查:SELECT prod_id, prod_name, prod_price FROM Products;

SELECT distinct vend_id FROM Products; 它指示數(shù)據(jù)庫只返回不同的值,它必須直接放在列名的前面,作用于所有的列

SELECT TOP 5 prod_name FROM Products; 返回5行數(shù)據(jù)

SELECT prod_name FROM Products ORDER BY prod_name;排序

SELECT prod_id, prod_price, prod_name FROM Products ORDER BY 2, 3; 先排序2列在排序3列

ORDER BY prod_price DESC;指定方向

SELECT prod_name, prod_price FROM Products WHERE prod_price = 3.49;過濾條件

WHERE prod_price BETWEEN 5 AND 10;檢查范圍

WHERE prod_price IS NULL;是否為空

WHERE vend_id = 'DLL01' AND prod_price <= 4;過濾多條件

WHERE vend_id = 'DLL01' OR vend_id = ‘BRS01’; WHERE子句可以包含任意數(shù)目的AND和OR操作符。

WHERE vend_id IN ( 'DLL01', 'BRS01' ) IN操作符一般比一組OR操作符執(zhí)行得更快

WHERE NOT vend_id = 'DLL01' 否定其后條件的關(guān)鍵字

SELECT prod_id, prod_name FROM Products WHERE prod_name LIKE 'Fish%';模糊查詢Like

WHERE prod_name LIKE '%bean bag%';

WHERE prod_name LIKE '__ inch teddy bear';匹配單個(gè)字符

WHERE cust_contact LIKE '[JM]%' 通配符用來指定一個(gè)字符集 J M

匯總

AVG()? SELECT AVG(prod_price) AS avg_price FROM Products;

返回某列的平均值

COUNT() SELECT COUNT(*) AS num_cust FROM Customers;

返回某列的行數(shù)

MAX() SELECT MAX(prod_price) AS max_price FROM Products;

返回某列的最大值

MIN() SELECT MIN(prod_price) AS min_price FROM Products;

返回某列的最小值

SUM() SELECT SUM(quantity) AS items_ordered FROM OrderItems WHERE order_num = 20005;

返回某列值之和

分組

SELECT vend_id, COUNT(*) AS num_prods FROM Products GROUP BY vend_id;

過濾分組

SELECT cust_id, COUNT(*) AS orders FROM Orders GROUP BY cust_id HAVING COUNT(*) >= 2;

子查詢

SELECT cust_id

FROM Orders

WHERE order_num IN (SELECT order_num

FROM OrderItems

WHERE prod_id = 'RGAN01');

WHERE Vendors.vend_id = Products.vend_id;鏈表查詢

外聯(lián)

SELECT Customers.cust_id, Orders.order_num FROM Customers INNER JOIN Orders

ON Customers.cust_id = Orders.cust_id;

組合查詢:

SELECT cust_name, cust_contact, cust_email FROM Customers

WHERE cust_state IN ('IL','IN','MI')

union

SELECT cust_name, cust_contact, cust_email FROM Customers

WHERE cust_name = 'Fun4All';

插入:

INSERT INTO Customers(cust_id, cust_name)VALUES('1000000006', 'Toy Land')

SELECT * INTO CustCopy FROM Customers; 復(fù)制表

更新

UPDATE Customers SET cust_email = 'kim@thetoystore.com' WHERE cust_id = '1000000005';

刪除

DELETE FROM Customers WHERE cust_id = '1000000006';

CREATE TABLE Products (

);

prod_id vend_id prod_name prod_price prod_desc

CHAR(10) CHAR(10) CHAR(254) DECIMAL(8,2) VARCHAR(1000)

NOT NULL, NOT NULL, NOT NULL, NOT NULL, NULL

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • (一)幾個(gè)數(shù)據(jù)庫相關(guān)的概念 1.數(shù)據(jù)庫 數(shù)據(jù)庫: 保存有組織數(shù)據(jù)的容器。 數(shù)據(jù)的所有存儲(chǔ)、檢索、管理和處理實(shí)際上是...
    快樂的小飛熊閱讀 627評(píng)論 0 1
  • Mysql 必知必會(huì) 查詢 檢索多個(gè)列SELECT prod_id, prod_name, prod_pri...
    yoomaz閱讀 692評(píng)論 0 1
  • 于是又到了梧桐絮飄滿校園的四月,又到了梧桐色相簿的季節(jié),我們迎來了實(shí)習(xí)生招聘。 “范老濕從不寫代碼”,“范老濕從不...
    Lance_Van閱讀 860評(píng)論 0 1
  • 1.表中的任何列都可以作為主鍵, 只要它滿足以下條件:任意兩行都不具有相同的主鍵值;每一行都必須具有一個(gè)主鍵值( ...
    Cherryjs閱讀 838評(píng)論 0 0
  • 1.簡(jiǎn)介 mysql是一個(gè)快速的、多線程的、多用戶的、支持健壯SQL的數(shù)據(jù)庫管理系統(tǒng)(DBMS)。mysql可以應(yīng)...
    at小宇閱讀 1,084評(píng)論 0 2

友情鏈接更多精彩內(nèi)容