جستجو در رشته (Strings) توسط دستورات Linq
با سلام
برنامه ای دارم که یک سری کد ملی رو در یک رکورد پشت سرهم ذخیره میکنه و کدهای ملی را با علامت ویرگول (,) از هم جدا کردم. (طبق تصویر)

درقسمت دیگه یک Query نوشتم که در صورتی که مساوی با هر کدام از کدهای ملی بود، رکوردها رو برگردونه. مشکل اینه فقط کد ملی اول رو پیدا میکنه ( تصویر پایین )
List<string> listRefer2 = db.Comission.Get(c => c.Comission_PersonCode == GetPersonLoginCode & c.ArchiveName == 12 & c.AllowPermission).Select(c => c.Refer_PersonsCode).ToList();
string JoinData = string.Join(",", listRefer2);
string[] newdatasplit = JoinData.Split(',');
foreach (string s in newdatasplit)
{
var CommissionModel = PagingList.Create(db.Miscellaneous.Get(c =>
c.NationalCode.Contains(s.Substring(0, s.IndexOf(",")+1)), orderby: e => e.OrderBy(c =>
c.Family)), 20, Page);
CommissionModel.Action = "GetMiscellaneous";
return View(CommissionModel);
}
ممنون میشم کمک کنید .
پاسخ هوش مصنوعی
به نظر می رسد که مشکل شما به دلیل استفاده نادرست از متد `Contains` در LINQ است. در کدی که نوشته اید، شما فقط الگوی `s.Substring(0, s.IndexOf(",") + 1)` را بررسی می کنید که به درستی کار نمی کند. لازم است به جای این کار، کل رشته کد ملی را بدون برش در متد `Contains` بررسی کنید.
شما می توانید کد را به صورت زیر اصلاح کنید:
List<string> listRefer2 = db.Comission.Get(c => c.Comission_PersonCode == GetPersonLoginCode & c.ArchiveName == 12 & c.AllowPermission).Select(c => c.Refer_PersonsCode).ToList();
string JoinData = string.Join(",", listRefer2);
string[] newdatasplit = JoinData.Split(',');
var CommissionModel = PagingList.Create(db.Miscellaneous.Get(c =>
newdatasplit.Any(s => c.NationalCode.Contains(s.Trim())), orderby: e =>
e.OrderBy(c => c.Family)), 20, Page);
CommissionModel.Action = "GetMiscellaneous";
return View(CommissionModel);
در اینجا ما از متد `Any` روی `newdatasplit` استفاده کرده ایم تا بررسی کنیم که آیا هیچ یک از کدهای ملی در `NationalCode` وجود دارد یا خیر. همچنین `s.Trim()` اضافه شده است تا مطمین شویم که فضای خالی در آغاز یا پایان رشته ها حذف شده است.
با این تغییر، شما باید بتوانید تمام رکوردهای مربوط به کدهای ملی را دریافت کنید. موفق باشید!
بهتره کدهایی که میخواید قرار بدید رو خلاصه بنویسید و از نوشتن فیلدهای غیرضروری پرهیز کنید. برای جستجو در رشته توسط دستورات انتیتی فریم ورک میتونید از دستور زیر استفاده کنید :
جستجو در رشته توسط تابع Contain
توسط تابع Contain می تونید توی رشته ها جستجو کنید و زیر رشته مورد نظر رو پیدا کنید :
var query = db.Comission.Get(c=> c.Comission_PersonCode.Contains(GetPersonLoginCode));
if (query != null)
{
///دستورات شما
}
البته در کدهاتون نگاه میکنم از Contains استفاده کردید اما دلیل اینکه سایر دستورات رو نوشتید نمی دونم چی هست چون خود Contains جستجو شما رو انجام میده.
- خطا سیستم
- آموزش استفاده از پلاگین گردونه شانس در Asp.net core به همراه سورس
- نمایش متن به صورت فرمت شده در CkEditor
- آموزش استفاده از SignalR در Asp.net Core با مثال عملی
- ادغام چند گزارش استیمول سافت بصورت پی دی اف در یک فایل
- نحوه تغییر استایل کامپوننت select2 چگونه است ؟
- چگونه امنیت پروژه را در Asp.net Core افزایش دهیم ؟
- ارسال پارامتر در دستور window.open جی کویری
- ارسال پارامتر از طریق جاوااسکریپت با کلیک روی تگ a
- خطای 500 زمان اجرا شدن پروژه روی هاست
- کار با CkEditor با قابلیت آپلود عکس
- خطا در ایجاد migration در Asp.net core
- تفاوت های Asp.net core و Asp.net mvc چیه؟
- دلیل اسپم شدن ایمیل های ارسالی از سرور
- نحوه لایه بندی پروژه Core و اضافه کردن به IIS
- ارسال ایمیل در Asp.net core
- آیا میشه در mvc core از کامپونت استفاده کرد
- آپلود فایل در Asp.net core چگونه است؟
- حذف کامل یک رکورد در جدول ریلیشن شده
- اشکال در آپلود فایل ویدیو در mvc core 2