PDA

View Full Version : سوال: جستجوی Contains در یک آرایه



shahab_ksh
پنج شنبه 03 اسفند 1391, 14:50 عصر
با سلام

کد زیر رو در نظر بگیرید

Dim aList = {"yek", "do", "se"}
Dim bList = {"salam", "yeki", "dota"}

Dim Query = From b In bList
Where b.Contains(*aList*)


حالا چطور میتونیم از لیست b لیستی رو استخراج کنم که Contains که آرایه alist هست درش صدق کنه؟

Mahmoud.Afrad
شنبه 05 اسفند 1391, 17:36 عصر
آیا منظورتون اینه که "از لیست b عناصری را انتخاب کن که عناصری از لیست a را در خود جای داده باشند"؟ یعنی "yeki", "dota" رو میخواهید؟
اگر بله:

var Query = from b in bList
where (from a in aList
where b.Contains(a)
select a).Count() > 0
select b;

/* OR
var Query = bList.Where(item =>
{
var q = aList.Select(i =>
{
item.Contains(i);
return true;
});
return (q.Count() > 0);
});
*/

davoodrm666_666
دوشنبه 07 اسفند 1391, 06:47 صبح
از framework 4 به بعد می تونی از SqlMethod.Like استفاده کنی
http://msdn.microsoft.com/en-us/library/system.data.linq.sqlclient.sqlmethods.like.aspx

shahab_ksh
دوشنبه 07 اسفند 1391, 12:51 عصر
با SqlMethod.Like جواب نگرفتم هیچ جایی تابع برای ورود آرایه نیست

Mahmoud.Afrad
دوشنبه 07 اسفند 1391, 17:22 عصر
دقیقا بفرمایید دیتاسورس چی هست و چه خروجی مد نظر شماست.

shahab_ksh
سه شنبه 08 اسفند 1391, 10:00 صبح
ببینید

جدولی رو از بانک اطلاعاتی Sql server 2005در نظر بگیرید که یکی از فیلد هاش UserAccess هست که مقدارش به صورت String هست مقدارش مثلا برای یکی از رکورد ها هست ,user,iuser,

خوب حالا من یه آرایه دارم که از بانک اطلاعاتی نیست میخام چک کنم آیا یکی از مقادیر این آرایه در این رشته هست یا نه ؟

Mahmoud.Afrad
سه شنبه 08 اسفند 1391, 16:04 عصر
فکر میکنم جواب شما در پست اول خودم دادم.

اگر کمک بهتری میخواهید یک نمونه از اطلاعات جدول(عکس) و همچنین یک نمونه از آرایه رو اینجا قرار بدید و بر حسب اطلاعات بگید که دقیقا چه خروجی رو میخواهید.

shahab_ksh
چهارشنبه 09 اسفند 1391, 12:00 عصر
ممنون

جدولی داریم به نام tbmaster که به صورت زیر هست
http://shahab.info/scr1.jpg

فیلد آخر یعنی AccessRoles رو در نظر بگیرید که مثلا برای رکورد اول به صورت ,users,iusers, هست

حالا من یه آرایه دارم به صورت زیر


Dim ArrayRoles As Array = {",ali,", ",users,", "admins"}



حالا هدف من اینه که توی فیلد AccessRoles بگردم و ببینم آیا یکی از آرایه های ArrayRoles توی AccessRoles هست یا نه !

فیلد AccessRoles به صورت String هست شاید بشه با Contents تست کرد که ArrayRoles توش هست یا نه

ممنون کمکم کنید

Mahmoud.Afrad
چهارشنبه 09 اسفند 1391, 14:50 عصر
میتونید با یک حلقه به تعداد عناصر داخل آرایه کوئری بزنید:

string[] ArrayRoles = { ",ali", ",users", ",admins" };
List<tbmaster> Query = new List<tbmaster>();
using (Database1Entities2 model = new Database1Entities2())
{
foreach (string role in ArrayRoles)
{
Query.AddRange(model.tbmaster.Where(u => u.AccessRoles.Contains(role)));
}
}



و یا به طریق زیر(نکته: model.tbmaster.ToList کل اطلاعات جدول tbmaster را داخل حافظه لود میکنه پس اگر حافظه کم نمیاد از کد زیر میتونید استفاده کنید)

string[] ArrayRoles = { ",ali", ",users", ",admins" };
using (Database1Entities2 model = new Database1Entities2())
{
var Query = from u in model.tbmaster.ToList()
where !string.IsNullOrEmpty(u.AccessRoles) && (from role in ArrayRoles
where u.AccessRoles.Contains(role)
select role).Any()
select u;
// OR
//var Query = model.tbmaster.ToList().Where(u => !string.IsNullOrEmpty(u.AccessRoles) && ArrayRoles.Any(role => u.AccessRoles.Contains(role)));

// use Query
dataGridView1.DataSource = Query.ToList();
}

shahab_ksh
چهارشنبه 16 اسفند 1391, 00:22 صبح
سلام معادل AddRange توی vb.net چیه چرا شناسایی نمیشه