- بله توزیع ویندوزی مناسب نیست ولی خب گاهی اوقات اجبار از طرف کارگزار وجود داره!
-مثال:http://blogs.msdn.com/b/adonet/archive/2010/06/28/performance-impact-of-server-side-generated-guids-in-ef.aspx
-اینکه EF از تمامی مشابه های موجود بهتره شکی ندارم.
In .NET 6 (preview 4), two long-awaited types have been introduced as part of the core library. DateOnly and TimeOnly allow developers to represent either the date or time portion of a DateTime. These two new types are structs (value types) and may be used when your code deals with date or time concepts independently. Both types can be found in the System namespace. Using these new types may align well with how databases allow similar data to be represented. Specifically, these types align well with the SQL Server date and time data types.
LINQPad is a powerful testing tool for all .NET developers that can help them deliver solutions in less time. In Getting the Most from LINQPad Succinctly, returning Succinctly series author José Roberto Olivas Mendoza lays out different ways to extend the functionality built into LINQPad. In this ebook, you’ll learn how to use LINQPad to query Entity Framework models in Visual Studio, how to work with the LINQPad command-line utility, how to write your own extensions and visualizers, and how to write custom data context drivers.
A Quick Tour of LINQPad
LINQPad and Entity Framework
LINQPad Scripting
LINQPad Extensibility
Custom Data Context Drivers
Stairway to XML
XML has been part of the SQL Standard since 2003, and is essential for
any DBA because so many of the dynamic management views return XML data.
Now that the industry is more used to data defined by document markup,
it is becoming more important than ever for Database Developers and DBAs
to understand the technology and to know where it makes sense to use
XML. In this book, originally a series of articles on
SQLServerCentral.com, Robert Sheldon flexes his talent to make the
complicated seem simple.
- .NET Core
- Node.js
- Docker
- Elasticsearch: A distributed and open source search engine based on Lucene. A blazing fast NoSQL database with replication capabilities, it is the most widely known component of the ELK stack, together with Kibana (for reporting and visualizations), Logstash (for data import) and Beats (for data shipping). Even Azure Search uses it behind the covers. Free but some tools are paid. Get it from http://elastic.co.
- ECMAScript 2015
- HTML5
- Kafka
- TypeScript
- MongoDB
- Git
- Nginx
- Octopus Deploy
- Azure
- Amazon Web Services
- Linux
- Visual Studio Code
- Xamarin
- Google Analytics
- SQL Server 2016
- Let’s Encrypt
- TensorFlow
- GitLab
- Redis
SPList list = mWeb.GetList(strUrl); if (list != null) { for (int i = list.ItemCount - 1; i >= 0; i--) { list.Items[i].Delete(); } list.Update(); }
public static void DeleteAllItems(string site, string list) { using (SPSite spSite = new SPSite(site)) { using (SPWeb spWeb = spSite.OpenWeb()) { StringBuilder deletebuilder = BatchCommand(spWeb.Lists[list]); spSite.RootWeb.ProcessBatchData(deletebuilder.ToString()); } } } private static StringBuilder BatchCommand(SPList spList) { StringBuilder deletebuilder= new StringBuilder(); deletebuilder.Append("<?xml version=\"1.0\" encoding=\"UTF-8\"?><Batch>"); string command = "<Method><SetList Scope=\"Request\">" + spList.ID + "</SetList><SetVar Name=\"ID\">{0}</SetVar><SetVar Name=\"Cmd\">Delete</SetVar></Method>"; foreach (SPListItem item in spList.Items) { deletebuilder.Append(string.Format(command, item.ID.ToString())); } deletebuilder.Append("</Batch>"); return deletebuilder; }
// We prepare a String.Format with a String.Format, this is why we have a {{0}} string command = String.Format("<Method><SetList Scope=\"Request\">{0}</SetList><SetVar Name=\"ID\">{{0}}</SetVar><SetVar Name=\"Cmd\">Delete</SetVar><SetVar Name=\"owsfileref\">{{1}}</SetVar></Method>", list.ID); // We get everything but we limit the result to 100 rows SPQuery q = new SPQuery(); q.RowLimit = 100; // While there's something left while (list.ItemCount > 0) { // We get the results SPListItemCollection coll = list.GetItems(q); StringBuilder sbDelete = new StringBuilder(); sbDelete.Append("<?xml version=\"1.0\" encoding=\"UTF-8\"?><Batch>"); Guid[] ids = new Guid[coll.Count]; for (int i=0;i<coll.Count;i++) { SPListItem item = coll[i]; sbDelete.Append(string.Format(command, item.ID.ToString(), item.File.ServerRelativeUrl)); ids[i] = item.UniqueId; } sbDelete.Append("</Batch>"); // We execute it web.ProcessBatchData(sbDelete.ToString()); //We remove items from recyclebin web.RecycleBin.Delete(ids); list.Update(); } }
[System.Reflection.Assembly]::Load("Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c") [System.Reflection.Assembly]::Load("Microsoft.SharePoint.Portal, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c") [System.Reflection.Assembly]::Load("Microsoft.SharePoint.Publishing, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c") [System.Reflection.Assembly]::Load("System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a") write-host # Enter your configuration here $siteUrl = "http://mysharepointsite.example.com/" $listName = "Name of my list" $batchSize = 1000 write-host "Opening web at $siteUrl..." $site = new-object Microsoft.SharePoint.SPSite($siteUrl) $web = $site.OpenWeb() write-host "Web is: $($web.Title)" $list = $web.Lists[$listName]; write-host "List is: $($list.Title)" while ($list.ItemCount -gt 0) { write-host "Item count: $($list.ItemCount)" $batch = "<?xml version=`"1.0`" encoding=`"UTF-8`"?><Batch>" $i = 0 foreach ($item in $list.Items) { $i++ write-host "`rProcessing ID: $($item.ID) ($i of $batchSize)" -nonewline $batch += "<Method><SetList Scope=`"Request`">$($list.ID)</SetList><SetVar Name=`"ID`">$($item.ID)</SetVar><SetVar Name=`"Cmd`">Delete</SetVar><SetVar Name=`"owsfileref`">$($item.File.ServerRelativeUrl)</SetVar></Method>" if ($i -ge $batchSize) { break } } $batch += "</Batch>" write-host write-host "Sending batch..." # We execute it $result = $web.ProcessBatchData($batch) write-host "Emptying Recycle Bin..." # We remove items from recyclebin $web.RecycleBin.DeleteAll() write-host $list.Update() } write-host "Done."
در این قسمت میخواهیم بیشتر روی مفاهیم اعمال شرط بر روی خروجی عمل واکشی کار کنیم. برای شروع کوئری سادهی زیر را اجرا و خروجی آن را تفسیر میکنیم.
Select From [Adventure Works]
همان طور که مشاهده میکنید، خروجی یک عدد میباشد. بدون نام ستون یا ردیف؟!
بهخاطر بیاورید که هر Cube در SSAS دارای یک Measure پیش فرض بود که در صورت عدم اعلام نام یک Measure در کوئری، SSAS به صورت پیش فرض مقدار این Measure را بر میگرداند. خوب؛ نام ستون و سطر چرا ذکر نشده است؟
به دلیل عدم اعلام صریح نام سطر و ستون در کوئری بالا، SSAS نام ستون و سطر خاصی را نمیتواند نمایش دهد.
با بررسی کوئری زیر به درک بیشتری از شاخص (Measure) پیش فرض Cube دست پیدا خواهید کرد.
Select From [Adventure Works] Where ( [Measures].[Reseller Sales Amount] )
خروجی همچنان مانند بالا میباشد اما در این حالت اعلام شده است که از کدام شاخص باید واکشی انجام شود. دلیل خروجی مشابه، یکسان بودن شاخص پیش فرض و شرط اعلام شده میباشد. به بیان دیگر [Measures].[Reseller Sales Amount] در [Adventure Works] به عنوان شاخص پیش فرض معرفی شده است و با اجرای کوئری زیر عملا شرط واکشی برای یک شاخص متفاوت اعمال شده است.
Select From [Adventure Works] Where [Measures].[Internet Sales Amount]
کوئری زیر را اجرا کنید:
Select [Measures].[Internet Sales Amount] on columns From [Adventure Works]
تنها تفاوت دو کوئری بالا ، در آوردن نام ستون می باشد . زیرا در هر دو سرجمع ، یک شاخص واکشی می گردد .
کوئری زیر را اجرا کنید:
select [Measures].[Internet Sales Amount] on columns From [Adventure Works] Where [Measures].[Internet Sales Amount]
این کوئری با خطا مواجه می شود . زیرا در آن کوئری در یک Axis و در شرط ، اعمال انتخاب شاخص شده است که این مورد فقط می بایستی در یکی از این دو قسمت رخ دهد .
و همچنین در صورت انتخاب دو شاخص متفاوت نیز با خطا برخورد خواهیم کرد.
Select [Measures].[Internet Sales Amount] on columns From [Adventure Works] Where [Measures].[Reseller Sales Amount]
به عبارت دیگر نمیتوان در خواست فیلتر کردن کوئری را برروی شاخص 1 داد؛ در صورتیکه میخواهیم شاخص 2 را واکشی کنیم. اعمال شرط برای واکشی اطلاعات از شاخص، پیش فرض نوشتن این شرط لازم نمیباشد؛ زیرا این شاخص به صورت پیش فرض انتخاب شدهاست.
select { [Product].[Product Categories].[Category], [Product].[Product Categories] }on columns From [Adventure Works] Where [Measures].[Reseller Sales Amount]
بنابراین کوئری بالا و کوئری زیر یکسان عمل خواهند کرد:
select { [Product].[Product Categories].[Category], [Product].[Product Categories] }on columns From [Adventure Works]
حال میخواهیم سرجمع فروش نمایندگان فروش محصولات در کشور کانادا را بر اساس دسته بندی محصولات داشته باشیم . برای این منظور کوئری زیر را مینویسیم:
Select { [Product].[Product Categories].[Category], [Product].[Product Categories] } on columns From [Adventure Works] Where [Customer].[Customer Geography].[Country].[Canada]
با اعمال شرط کشور کانادا، عملا خروجی فروش نمایندگان فروش در کانادا بر اساس دسته بندی محصولات واکشی میگردد. کمی به خروجی دقت نمایید. مبلغ سرجمع برابر مبلغ کل فروش اینترنتی میباشد که در کوئریهای قبلی بدست آوردیم؟!
خروجی این کوئری مشکوک به نظر می رسد . زیرا سرجمع مبالغ فروش نمایندگان فروش برای کانادایی ها برابر کل فروش نمایندگان فروش می باشد .آیا کانادایی ها تمام خرید را انجام داده اند؟ خیر .
دلیل این اشکال در این است که هیچ گونه ارتباطی بین بعد مشتری و شاخص پیش فرض در سیستم وجود ندارد .
مشکل کوئری بالا در این کوئری با تغییر بعد در قسمت اعمال شرط برطرف شده؛ اکنون خروجی حقیقی مشاهده می شود .
Select { [Product].[Product Categories].[Category], [Product].[Product Categories] }on columns From [Adventure Works] Where [Sales Territory].[Sales Territory].[Country].[Canada]
حال اگر بخواهیم دو شرط را به صورت همزمان داشته باشیم به صورت زیر عمل خواهیم کرد :
Select { [Product].[Product Categories].[Category], [Product].[Product Categories] } on columns From [Adventure Works] Where ( [Customer].[Customer Geography].[Country].[Canada], [Measures].[Internet Sales Amount] )
در کوئری بالا سرجمع فروش اینترنتی توسط مشتریان کانادایی بدست آمده است.
البته میتوان کوئری فوق را به صورت زیر هم نوشت و در این حالت نام ردیف هم در خروجی قابل مشاهده میباشد و البته دیگر نیازی به اعمال شرط، روی نام شاخص نمیباشد. زیرا اعمال شرط در ردیف انجام شده است.
Select { [Product].[Product Categories].[Category], [Product].[Product Categories] } on columns, [Measures].[Internet Sales Amount] On rows From [Adventure Works] Where ( [Customer].[Customer Geography].[Country].[Canada] )
حال اگر بخواهیم فروش اینترنتی را برای استرالیا و کانادا داشته باشیم به صورت زیر عمل میکنیم .
Select { [Product].[Product Categories].[Category],[Product].[Product Categories] } on columns From [Adventure Works] Where ( [Customer].[Customer Geography].[Country].[Canada], [Customer].[Customer Geography].[Country].[Australia], [Measures].[Internet Sales Amount] )
در اینجا ما نیاز داریم میزان فروش اینترنتی کانادا و استرالیا را برای انواع محصولات بدست آوریم ، اما نحوه استفاده از دو ساختار سلسله مراتبی مرتبط با یک دایمنشن را درست رعایت نکردهایم .بنابر این کوئری زیر را اجرا خواهیم کرد :
Select { [Product].[Product Categories].[Category], [Product].[Product Categories] } on columns From [Adventure Works] Where ( { [Customer].[Customer Geography].[Country].[Canada], [Customer].[Customer Geography].[Country].[Australia] }, [Measures].[Internet Sales Amount] )
که همان کوئری بالا می باشد با این تفاوت که از {} استفاده شده است .
درابتدا میزان فروش نمایندگان فروش در انگلستان را بدست میآوریم:
Select { [Product].[Product Categories].[Category], [Product].[Product Categories] } on columns From [Adventure Works] Where [Sales Territory].[Sales Territory].[Country].[United Kingdom]
و برای بدست آوردن فروش اینترنتی تمام کشور ها به جز انگلستان بر اساس دسته بندی محصولات کوئری زیر را خواهیم نوشت :
Select { [Product].[Product Categories].[Category], [Product].[Product Categories] } on columns From [Adventure Works] Where [Sales Territory].[Sales Territory].[Country] - [Sales Territory].[Sales Territory].[Country].[United Kingdom]
البته از تابع Except هم میتوان به صورت زیر استفاده کرد
Select { [Product].[Product Categories].[Category], [Product].[Product Categories] } on columns From [Adventure Works] Where except( [Sales Territory].[Sales Territory].[Country], [Sales Territory].[Sales Territory].[Country].[United Kingdom] )
عملگر منها مشابه except کار میکند.