۱۸ مطلب با موضوع «Web Development Teams :: Linq» ثبت شده است
split کردن عناصر با linq
بسم الله الرحمن الرحیم
آموزش برنامه نویسی
اگر یک لیست به صورت زیر داشته باشیم که با یک کاراکتر خاص جدا شده باشند و بخواهیم آن ها را به صورت آیتم های جداگانه بررسی کنیم. چطور می توانیم اینکار را انجام دهیم.
string[] websites = {"Ably.ir,Google.com,Yahoo.com,Linkedin.com"};
این مشکل در لیست های json بسیار اتفاق می افتد که ما نیاز داریم عناصر را به صورت جداگانه بدست آوریم. برای این مشکل می توانید با یک دستور LiNQ ساده اطلاعات خود را بر اساس کاراکتر جداکننده به صورت عناصر جداگانه بدست آورید. برای اینکار کافی است از کوئری زیر استفاده کنید.
websites.SelectMany(n => n.Split(',')).ToList();
ادامه مطلب...
تغییر خروجی یک دستور کوئری در لینک
بسم الله الرحمن الرحیم
آموزش select new در LINQ
در بسیاری از کوئری های LINQ ما نیاز خواهیم داشت، تا نتیجه ی کوئری را به کلاس دیگری Bind کنیم برای این کار مثالی را در این جا بررسی خواهیم کرد.
بر روی یک Table کوئریی را می خواهیم اجرا کنیم، در این کوئری فقط فیلدهای Id , Name را لازم خواهیم داشت، این دو فیلد را باید تبدیل به یک کلاس دیگر کنیم.
برای اینکار کد ما به صورت زیر خواهد بود:
class ProjectInfo
{
public string Name {get; set; }
public long Id {get; set; }
}
public List<ProjectInfo> GetProjectForCombo()
{
using (MyDataContext db = new MyDataContext (DBHelper.GetConnectionString()))
{
var query = from pro in db.Projects
select new ProjectInfo(){ Name = pro.ProjectName, Id = pro.ProjectId };
return query.ToList();
}
}
ادامه مطلب...
جستجو در LINQ
بسم الله الرحمن الرحیم
جستجو یک لیست در عناصر لیست دیگر
روش های زیادی برای انجام یک کار وجود دارد و در بسیاری از مواقع تمامی این روش ها شما را به مقصودتان می رساندد اما طبیعتا همه ی آنها روش درست نیستند. یکی از موارد زیادی که ممکن است برای شما نیز اتفاق بیافتد جستجو کردن یک لیست از اطلاعات درون یک لیست دیگر است طبیعتا اولین راه حل نوشتن یک حلقه (for, foreach, while, ,...) و بررسی تک تک عناصر مجموعه اول در مجموعه دوم است.
در اینجا با یک کد بسیار ساده LINQ (لینک تلفظ می شود) می توانیم این بررسی را انجام دهیم.
تصور کنید یک لیست از کاربران خود را با یک شرط مشخص از پایگاه داده واکشی می کنیم. مثلا تمامی کاربرانی که فیلد enable آنها true است.
using (ContextDB contextDB = new ContextDB())
{
var listOfUserID = contextDB.Users.Where(x => x.Enabled == true).Select(x => x.UserID).ToList();
List<Student> StudentUsers = contextDB.Students.Where(x => listOfUserID.Contains(x.UserID)).ToList();
foreach (var item in StudentUsers)
{
Response.Write(item.FirstName);
}
}
ادامه مطلب...
آموزش Full-Text Search
بسم الله الرحمن الرحیم
آموزش ساخت Full Text Catalog و Full Text Search در SQL Server
در این آموزش مفاهیم زیر را بررسی خواهیم کرد
-
ساخت Full-Text Search
-
ساخت Full-Text Catalog
-
ساخت Full-Text Index
-
-
نوشتن Query با استفاده از Full-Text Search
-
استفاده از Full-Text Search در پروژه های ASP.NET MVC به کمک LINQ
تصور کنید وب سایتی دارید و میخواهید بر روی حجم زیادی از اطلاعات جستجو انجام دهید. وب سایت شما یک وب سایت آموزشی مانند ABLY.ir است و در آن متن های زیادی وجود دارد. شما میخواهید یک فرم جستجو برای جستجو در تمامی قسمت های وب سایت ایجاد کنید.
چطور می توانید این جستجو را با این ویژگی ها پیاده سازی کنید؟
1- جستجو در کلمات کلیدی
2- جستجو در میان نویسندگان
3- جستجو در مطالب
4- جستجو در عنوان فایل ها
و..
اولین راه حلی که انتخاب می شود JOIN کردن تمام جداول و نوشتن یک دستور SELECT با انجام WHERE بر روی همه ی ستون ها است!. این راه حل بدترین راه حل ممکن است زیرا در صورتی که حجم اطلاعات شما افزایش یابد عملا سیستم جستجو شما دیگر پاسخگو نخواهد بود زیرا طبیعتا برای جستجو در متن ها باید از دستور LIKE استفاده کنید که این دستور خود به دلیل مقایسه تمامی عبارت های ذخیره شده به صورت بخش به بخش با متن درخواستی کاربر بسیار سرعت کمی دارد، همچنین هزینه JOIN بسیار سنگین خواهد بود و باعث می شود عملا این ویژگی غیر قابل استفاده شود.
SQL Server با ارائه دادن ابزاری به نام Full Text Search به شما این امکان را می دهد که به سادگی و با بهترین کارایی جستجحو های خود را بر روی متن ها انجام دهید.
Full Text Search
Full Text Search ابزاری است که به شما برای ایجاد انواع کوئری های پیچده بر روی داده های از نوع کاراکتر (Character) کمک می کند. این کوئری ها می توانند بر روی کلمات، جمله ها و عبارت ها مورد استفاده قرار گیرند. ما می توانیم یک full-text index را بر روی یک Table و یا یک indexed view ایجاد کنیم. full-text Search تنها می تواند بر روی یک Table و یا یک indexed view مورد استفاده قرار گیرد. Index می تواند تا 1024 ستون (Column) را در بر گیرد.
Full Text Index
Full Text Index از Token هایی تشکیل می شود که این Token ها در واقع همان کلمات درون یک فیلد شما هستند و این امر باعث می شود که بتوان بر روی متون index گذاری کرد و سرعت جستجو را افزایش داد.
مثال: من اسماعیل شیدایی هستم.
اگر مقدار یکی از رکوردهای ما به صورت بالا باشد پس از انجام عملیات full-text index این متن به صورت زیر ذخیره خواهد شد.
"من"
"اسماعیل"
"شیدایی"
"هستم"
این کار باعث می شود تا شما در سریعترین حالت ممکن بتوانید به اطلاعات مورد نظر خود برسید زیرا SQL Server اطلاعات شما را Index گذاری می کند در نتیجه به سرعت می تواند محل قرار گیری (شماره رکورد) هر کلمه را در جدول بازیابی کند.
طبیعتا راه حل پیش فرض برای جستجو در متن ها استفاده از دستور LIKE می باشد. دستور Like بر روی کاراکترها جستج خود را انجام می دهد و مقدار درخواستی شما را با تمام متن ها مقایسه می کند اما در Full Text Search مقدار درخواستی شما با کلمات مقایسه می شود به همین دلیل تفاوت سرعت اجرای این دو دستور در کوئری های پیچیده بسیار مشخص خواهد بود.
برای ساخت Index می بایست ما مراحل زیر را انجام دهیم.
1. Create a Full-Text Catalog
2. Create a Full-Text Index
3. Populate the Index
Create a Full-Text Catalog
ابتدا دیتابیس خود را انتخاب کرده، سپس از بخش Storage بر روی Full Text Catalog راست کلیک کرده و گزینه New Full-Text-Catalog را انتخاب می کنیم.
در پنجره باز شده نامی را برای Full Text Catalog خود انتخاب می کنیم و سپس Ok را انتخاب کنید. Full Text Catalog ما با موفقیت ایجاد شد.
ادامه مطلب...دستور Any
بسم الله الرحمن الرحیم
دستور Any
با استفاده از دستور Any شما می توانید وجود یک شی را در یک لیستی از اشیا بررسی کنید.
یک مثال ساده از این دستور به صورت زیر است
class Pet { public string Name { get; set; } public int Age { get; set; } public bool Vaccinated { get; set; } } public static void AnyEx3() { // Create an array of Pets. Pet[] pets = { new Pet { Name="Barley", Age=8, Vaccinated=true }, new Pet { Name="Boots", Age=4, Vaccinated=false }, new Pet { Name="Whiskers", Age=1, Vaccinated=false } }; // Determine whether any pets over age 1 are also unvaccinated. bool unvaccinated = pets.Any(p => p.Age > 1 && p.Vaccinated == false); Console.WriteLine( "There {0} unvaccinated animals over age one.", unvaccinated ? "are" : "are not any"); } // This code produces the following output: // // There are unvaccinated animals over age one.ادامه مطلب...
تفاوت دستور Select با SelectMany در LINQ
بسم الله الرحمن الرحیم
تفاوت دستور Select با SelectMany در LINQ
می توانید مقاله آموزش Linq به زبان فارسی را از این قسمت مشاهده کنید.
دو عملگر Select و SelectMany عملگر های projection هستند. عملگر Select برای انتخاب مقادیر از یک مجموعه است اما عملگر SelectMany برای انتخاب مقادیر یک مجموعه از مجموعه دیگر است.
اپراتور یا عملگر Select یک مقدار را به عنوان خروجی به شما می دهد در صورتی که SelectMany یک خروجی شامل مقادیری مرتبط به یکدیگر را به شما ارائه می دهد.
عملا، عملگر SelectMany یک IEnumerable<IEnumerable<T>> در IEnumrable<T> ایجاد می کند. اینطور می توان گفت که، یک لیست که خود این لیست هر عنصرش یک لیست است را از یک مجموعه ایجاد می کند.
Strongly typed
بسم الله الرحمن الرحیم
Strongly typed
زبان های Strongly typed به شما اجازه نمی دهند که از یک نوع به نام یک نوع دیگر استفاده کنید. مثلا string به int
در Strongly typed به صورت اتوماتیک یک نوع به نوع دیگر تبدیل نمی شود. مثلا در زبان Perl می توانید یک رشته
شامل "123" در یک numeric قرار دهید و این به صورت اتوماتیک تبدیل به 123 می شود اما زبان های strongly typed این کار را انجام نمی دهند مثلا python یک زبان strongly typed است.
طبیعتا خطاهای زیادی را در هنگام کار کردن با سی شارپ مخصوصا LINQ در ارتباط با strongly typed مشاهده کردید:
مثال
var answer = 1 * "1";
این دستور اجرا نمی شود، بلکه شما باید خودتان به صورت صریح تبدیل نوع را انجام دهید.
اما در PHP دستور زیر اجرا می شود:
$x = "3" * 1; // is correct in php
کوئری با تاخیر
بسم الله الرحمن الرحیم
آموزش لینک
در بخش های آموزش Linq در مورد کوئری های با تاخیر به صورت مختصر صحبت شد اما برای درک بهتر نیاز دیدم تا یک مثال را بررسی کنیم تا در صورتی که مطلب کاملا روشن نشده است در اینجا به طور کامل مشخص گردد.
این مثال در نظر بگیرید:
int[] price = new int{6500,5000,7800,9000,4800};
var result= price.Order().Take(3);
price[5]=999999;
foreach(var p in result)
{
Console.WriteLine(p);
}
ادامه مطلب...
آموزش Linq (بخش هشتم)
بسم الله الرحمن الرحیم
مشاهده تمامی آموزش های دوره LINQ
آموزش LINQ
بخش هشتم
LINQ
در این بخش تگ های تبدیل لینک را آموزش خواهم داد
Conversion Operators
cast
عناصر مجموعه را به یک نوع مشخص تبدیل می کند
ArrayList list = new ArrayList { 1, 3, 2, 3, 1, 8, 13 };
IEnumerable<int> query = list.Cast<int>();
foreach (int i in query)
Console.WriteLine(i);
//output
//1
//3
//2
//3
//3
//1
//8
//13
ادامه مطلب...
آموزش Linq (بخش هفتم)
بسم الله الرحمن الرحیم
مشاهده تمامی آموزش های دوره LINQ
آموزش LINQ
بخش هفتم
LINQ
در این بخش تگ های اتصال لینک را آموزش خواهم داد
Join operators
join
برای متصل کردن دو شی یه یکدیگر از متد join استفاده می کنیم. مثال:
var query = from c in customers join o in orders on c.CustomerID equals o.CustomerID
select new {FullName = c.Name + " " +
c.Family ,
c.CustomerID ,
o.OrderDate ,
TotalOrder = o.Total
};
ادامه مطلب...
آموزش Linq (بخش ششم)
بسم الله الرحمن الرحیم
مشاهده تمامی آموزش های دوره LINQ
آموزش LINQ
بخش ششم
LINQ
در این بخش تگ های انتخابی لینک را آموزش خواهم داد
Element opertators
ElementAt
عنصر واقع در یک اندیس مشخص شده در یک مجموعه را برمی گرداند.
var query = SampleList.ElementAt(4);
ElementAtOrDefault
عنصر واقع در یک اندیس مشخص در یک مجموعه را برمی گرداند و یا اگر اندیس خارج از دامنه باشد یک مقدار پیش فرض را برمی گرداند.
ادامه مطلب...آموزش Linq (بخش پنجم)
بسم الله الرحمن الرحیم
مشاهده تمامی آموزش های دوره LINQ
آموزش LINQ
بخش پنجم
LINQ
در این بخش تگ های تولیدی لینک را آموزش خواهم داد
Generation Empty
Range
مجموعه ای را تولید می کند که حاوی دنباله ای از اعداد است مثال:
// Generate a sequence of integers from 1 to 10
// and then select their squares.
IEnumerable squares = Enumerable.Range(1, 10).Select(x => x * x);
foreach (int num in squares)
Console.WriteLine(num);
/*
This code produces the following output:
1
4
9
16
25
36
49
64
81
100
*/
ادامه مطلب...
آموزش Linq (بخش چهارم)
بسم الله الرحمن الرحیم
مشاهده تمامی آموزش های دوره LINQ
آموزش LINQ
بخش چهارم
LINQ
در این بخش عملگرهای کمیت سنج و عملگر های دسته بندی را معرفی خواهم کرد
Quantifier
All
تمام عناصر یک مجموعه را بررسی و در صورت صحیح بودن شرط برای همه مقادیر، مقدار true بر می گرداند.
List<int> SampleList1 = new List<int>() { 1, 3, 2, 3, 1, 8, 13 };
bool query = SampleList1.All( c => ((c % 2) == 0));
Console.WriteLine(query);
//output
//False
ادامه مطلب...
آموزش Linq (بخش سوم)
بسم الله الرحمن الرحیم
مشاهده تمامی آموزش های دوره LINQ
آموزش LINQ
بخش سوم
LINQ
در این بخش تگ های دسته بندی لینک را آموزش خواهم داد
Group By
در بعضی پرس و جو ها شما نیاز دارید که نتیجه را به صورت گروه بندی نمایش دهید برای گروه بندی باید به صورت زیر عمل کنید:
var queryCustomersByCity = from cust in customers group cust by cust.City;
یا
var query = from c in customers group c by c.Country into cc select new { Country = cc.Key };
فکر کنم نیازی به توضیح نیست با استفاده از متغییر دامنه ما تعیین می کنیم که بر اساس چه فیلدی گروه بندی شود در اینجا ما بر اساس شی مشتری که فیلد شهر را دارد گروه بندی می کنیم.
اگر بخواهیم به نتیجه گروه بندی دسترسی داشته باشیم باید از عبارتinto استفاده کنیم. مثال:
var custQuery = from cust in customers group cust by cust.City into custGroup where custGroup.Count() >2 orderby custGroup.Key select custGroup;
ادامه مطلب...
توابع توسعه
بسم الله الرحمن الرحیم
بسم الله الرحمن الرحیم
مشاهده تمامی آموزش های دوره LINQ
آموزش LINQ
در بعضی مواقع ممکن است شما کلاسی را داشته باشید که نتوانید از آن ارث ببرید و یا تغییری در آن ایجاد کنید راه حل چیست؟
راه حل استفاده از توابع توسعه است در تعریف این توابع باید اولا static باشند و دوما اولین پارامتر ورودی با کلمه کلیدی this شروع شود (فقط اولین پارامتر) مثال:
static class MyExtensionMethodes
{
public static string PrintString(this int input)
{
return input.ToString();
}
}
برای روشن تر شدن مطلب یک مثال را بررسی خواهیم کرد فکر کنید که یک کلاس با نام Car داریم و این کلاس را اجازه دسترسی به آن نداریم به عبارتی نمی توانیم ان را تغییر دهیم کلاس ما به صورت زیر تعریف شده است
public class car
{
public void PrintName(String name)
{
MessageBox.Show(name);
}
}
ادامه مطلب...
آموزش Lambda
بسم الله الرحمن الرحیم
بسم الله الرحمن الرحیم
مشاهده تمامی آموزش های دوره LINQ
آموزش LINQ
در این بخش قصد دارم به معرفی عبارات لامبدا بپردازم انشالله که مفید واقع گردد.
در حالت عادی ما یک تابع را به صورت زیر تعریف می کنیم
public void Load(object parameter)
{
.....
}
این تابع دارای بخش های زیر است:
- میدان دید تابع public
- خروجی تابع void
- نام تابع load
- پارامتر ورودی تابع parameter
- بدنه تابع
حال در تابع هایی که به وسیله عبارت لامبدا تعریف می شوند بخش های زیر فقط وجود دارد:
- پارامترها
- بدنه تابع
(int x) => x + 1;
ادامه مطلب...
آموزش Linq (بخش دوم)
بسم الله الرحمن الرحیم
مشاهده تمامی آموزش های دوره LINQ
آموزش LINQ
بخش دوم
LINQ
در این بخش عملگرهای استاندارد و اصلی لینک به همراه توابع تجمعی را آموزش خواهم داد.
منباب اطلاع: شما با استفاده از لینک می توانید بر روی نوع های جنریک های مختلف کوئری بزنید مثال:
IEnumerable<Customer> customerQuery = from cust in customers where cust.City == "London" select cust;
foreach (Customer customer in customerQuery)
{
Console.WriteLine(customer.LastName + ", " + customer.FirstName);
}
بحثی در لینک وجود دارد به نام اجرای با تعویق، در واقع به این معنی است که هنگامی که شما یک دستور لنیک را می نویسید آن را فقط ایجاد می کنید و وقتی آن را با foreach می خوانید در آن زمان اجرا می کنید. متغییر پرس وجو هرگز نتایج را نگهداری نمی کند یعنی اگر شما یک دستور را بر روی پایگاه داده اجرا کنید و پایگاه داده دائما تغییر کند نتایج شما هم به ازای هر بار اجرا شدن (منظور از اجرا شدن مثلا همان دستور foreach است) نتایج متفاوتی خواهد داشت.
بعضی دستورات لینک صریحا اجرا می شوند مثل First و Average ،Max ،Count چون باید اجرا شوند تا بتوانند نتیجه را مشخص کنند و این نوع دستورات یک مقدار بر می گرداند به این عملگر ها، عملگرهای تجمعی می گویند.
ادامه مطلب...آموزش Linq (بخش اول)
بسم الله الرحمن الرحیم
مشاهده تمامی آموزش های دوره LINQ
آموزش LINQ
بخش اول
LINQ
در این بخش قصد دارم به معرفی LINQ بپردازم و آن را به صورت مختصر و درحین حال کامل آموزش دهم
همان طور که می دانید شما برای گرفتن کوئری و به عبارتی پرس و جو بر روی منبع های مختلف مثل XML,SQL و ... نیاز به آموزش زبان های مختلف دارید که مشکل بسیار بزرگی است راه حل ارائه گردیده استفاده از زبانی است که از همه این منبع ها پشتیبانی نماید. لینک در VS2008 و .Net 3.5 ارائه گردید و linq مخفف عبارت Language Integrated Query است.
برای تئوری همین کافی است.
لطفا از این پس LINQ را لینک تلفظ نمایید.
در اجرای دستورات لینک سه بخش مورد استفاده است:
- منبع داده
- پرس و جو
- اجرا
مثال:
int[] numbers = new int[7] { 0, 1, 2, 3, 4, 5, 6 };
var numQuery = from num in numbers where (num % (0 == 2 select num;
foreach (int num in numQuery)
{
Console.Write("{0,1} ", num);
}
ادامه مطلب...