PDA

View Full Version : نوشتن دستور شرطی



sajad_boj70
سه شنبه 07 بهمن 1393, 16:19 عصر
سلام. دوستان من یک فرم جست و جو دارم با فیلد نام و نام خانوادگی.
الان من جست و جویی نوشتم که وقتی کاربر نام رو "سجاد " و نام خانوادگی رو "رضایی" وارد میکنه برنامه فقط رکورد هایی رو میاره که فقط نام شون "سجاد " و نام خانوادگی شون"رضایی " باشه.

این هم کدش :


string na = txtname.Text.ToString();
string fam = txtfamily.Text.ToString();
var query = t.lists.ToList();

if (txtname.Text != "")
{


query = query.Where(a => a.name.Contains(na)).ToList();
}
else
{
query = query.ToList();
}
if (txtfamily.Text != "")
{
query = query.Where(a => a.family.Contains(fam)).ToList();

}
else
{
query = query.ToList();

LstAlbums.DataSource = query;
DataBind();
}


حالا چطوری میتونم جست و جویی بنویسم که وقتی کاربر نام رو "سجاد" و نام خانوادگی رو "رضایی" وارد کرد هم نام های "سجاد " و هم نام خانوادگی های "رضایی" رو بتونه بیاره؟

pcpsoft
سه شنبه 07 بهمن 1393, 16:50 عصر
سلام. دوستان من یک فرم جست و جو دارم با فیلد نام و نام خانوادگی.
الان من جست و جویی نوشتم که وقتی کاربر نام رو "سجاد " و نام خانوادگی رو "رضایی" وارد میکنه برنامه فقط رکورد هایی رو میاره که فقط نام شون "سجاد " و نام خانوادگی شون"رضایی " باشه.

این هم کدش :


string na = txtname.Text.ToString();
string fam = txtfamily.Text.ToString();
var query = t.lists.ToList();

if (txtname.Text != "")
{


query = query.Where(a => a.name.Contains(na)).ToList();
}
else
{
query = query.ToList();
}
if (txtfamily.Text != "")
{
query = query.Where(a => a.family.Contains(fam)).ToList();

}
else
{
query = query.ToList();

LstAlbums.DataSource = query;
DataBind();
}


حالا چطوری میتونم جست و جویی بنویسم که وقتی کاربر نام رو "سجاد" و نام خانوادگی رو "رضایی" وارد کرد هم نام های "سجاد " و هم نام خانوادگی های "رضایی" رو بتونه بیاره؟

دوست عزیز من زیاد در asp.net سر رشته ندارم,اما یقینا باید از فیلترینگ حروف استفاده کنید,شاید این کمکتون کنه


<%@ Page Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="LargeDataSource.aspx.cs"
Inherits="ASPxComboBox_LargeDataSource" EnableSessionState="ReadOnly" %>
<asp:Content runat="server" ContentPlaceHolderID="CustomHeadHolder"> <script type="text/javascript">
var startTime;
function OnBeginCallback() {
startTime = new Date();
}
function OnEndCallback() {
var result = new Date() - startTime;
result /= 1000;
result = result.toString();
if(result.length > 4)
result = result.substr(0, 4);
time.SetText(result.toString() + " sec");
label.SetText("Time to retrieve the last data:");
}
</script>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentHolder" runat="Server">
<dx:CreateDatabaseControl runat="server" ID="CreateDatabaseControl" TableKey="GeneratedPersonTable" />
<div runat="server" id="Demo">
<div class="BottomPadding">
<dx:ASPxLabel ID="ASPxLabel1" runat="server" Text="Type to search:" AssociatedControlID="ASPxComboBox1" />
</div>
<div style="float: left">
<dx:ASPxComboBox ID="ASPxComboBox1" runat="server" EnableCallbackMode="true" CallbackPageSize="10"
ValueType="System.String" ValueField="ID"
OnItemsRequestedByFilterCondition="ASPxComboBox_OnItemsRequestedByFilterCondition_SQL"
OnItemRequestedByValue="ASPxComboBox_OnItemRequestedByValue_SQL" TextFormatString="{0} {1} {2}"
Width="400px" DropDownStyle="DropDown">
<Columns>
<dx:ListBoxColumn FieldName="FirstName" />
<dx:ListBoxColumn FieldName="LastName" />
<dx:ListBoxColumn FieldName="Phone" />
</Columns>
<ClientSideEvents BeginCallback="function(s, e) { OnBeginCallback(); }" EndCallback="function(s, e) { OnEndCallback(); } " />
</dx:ASPxComboBox>
</div>
<div style="float: left; margin-left: 2%">
<table>
<tr>
<td>FilterMinLength: &nbsp;</td>
<td>
<dx:ASPxSpinEdit ID="FilterMinLengthSpinEdit" runat="server" Number="0" MinValue="0" MaxValue="5" onvaluechanged="FilterMinLengthSpinEdit_ValueChanged" AutoPostBack="true" Width="60px" ValueChangedDelay="500" />
</td>
</tr>
</table>
<div class="TopPadding">
<dx:ASPxLabel ID="ASPxLabel2" runat="server" ClientInstanceName="label" />
<dx:ASPxLabel ID="ASPxLabel3" runat="server" ClientInstanceName="time" Font-Bold="true" />
</div>
</div>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" />
</div>
</asp:Content>

sajad_boj70
سه شنبه 07 بهمن 1393, 17:33 عصر
ممنون دوست عزیز از پاسختون اما این کد خیلی شلوغه من چیزی مشتوجه نشدم!

fatboy
سه شنبه 07 بهمن 1393, 19:04 عصر
من خیلی با linq کار نکردم ولی شاید بتونید تمام حالات ممکن رو بررسی کنید
کاربر فقط اسم رو پر کنه یا کاربر فقط فامیلی رو پر کنه یا هر دو رو پر کنه یا هیچ کدوم رو.

string na = txtname.Text.ToString();
string fam = txtfamily.Text.ToString();
var query = t.lists.ToList();

if (txtname.Text != "" && txtfamily.Text != "")
{
query = query.Where(a => a.name.Contains(na) and a.family.Contains(fam)).ToList();
}
else if (txtname.Text != "")
{
query = query.Where(a => a.name.Contains(na)).ToList();
}
else if (txtfamily.Text != "")
{
query = query.Where(a => a.family.Contains(fam)).ToList();
}
else
{
query = query.ToList();

LstAlbums.DataSource = query;
DataBind();
}

sajad_boj70
سه شنبه 07 بهمن 1393, 19:18 عصر
آقای fatboy ممنون از پاسختون. این روش خوبه اما برای حالتی که تعداد فیلد ها زیاد باشه خیلی سخت میشه !
من 10 تا فیلد دارم و با این روش خیلی شلوغ و پیچیده میشه

mojtaba24
سه شنبه 07 بهمن 1393, 20:06 عصر
به جای 4 تا if از switch استفاده کنید بهتره


int caseSwitch = 1;
switch (caseSwitch)
{
case 1:
Console.WriteLine("Case 1");
break;
case 2:
Console.WriteLine("Case 2");
break;
default:
Console.WriteLine("Default case");
break;
}

inam ye format digash

private void btnSwitchHashTest_Click(object sender, EventArgs e)
{
string test1 = "mytestvalue";
string test2 = "myTestValue";

int t1hash = test1.GetHashCode();
int t2hash = test2.GetHashCode();

t1hash = StringComparer.CurrentCultureIgnoreCase.GetHashCod e(test1);
t2hash = StringComparer.CurrentCultureIgnoreCase.GetHashCod e(test2);

switch ( t1hash )
{
case CASE_1_HASH:
// do something
break;
case CASE_2_HASH:
// do something else
break;
case CASE_3_HASH:
// do something else alternatively
break;
// ... etc
}
}

sajad_boj70
سه شنبه 07 بهمن 1393, 22:59 عصر
ممنون. اما دوستان کسی حل این مشکل رو به روش linq میتونه بگه

monadifard
چهارشنبه 08 بهمن 1393, 12:03 عصر
ممنون. اما دوستان کسی حل این مشکل رو به روش linq میتونه بگه

عرض به خدمت شما که این کد جواب میده
ان شاالله


DataClassesDataContext d = new DataClassesDataContext();
var q = d.Table4s.Where(a=>a.Name.Contains("sa")).ToList();
var h = d.Table4s.Where(a => a.Family.Contains("mo")).ToList();
var t = q.Union(h).ToList();
GridView1.DataSource = t;
DataBind();

sajad_boj70
چهارشنبه 08 بهمن 1393, 12:16 عصر
تقدیر و تشکر میکنم از آقای پروفسور منادی فرد استاد بزرگ asp در ایران:لبخند:

IKE ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ــــL داری به همین غلظت.:تشویق:

monadifard
چهارشنبه 08 بهمن 1393, 12:25 عصر
تقدیر و تشکر میکنم از آقای پروفسور منادی فرد استاد بزرگ asp در ایران:لبخند:

IKE ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ــــL داری به همین غلظت.:تشویق:

خواهش میکنم آقای ابراهیمی ...
:چشمک: