Recherche de Texte intégral avec LINQ

Salut et merci à l'avance,

Je suis en train de mettre en œuvre une fonction de recherche où les résultats pourraient être remplie dans un Gridview. Je suis à l'aide de LINQ to requête de ma db en c#.

Le problème je suis à essayer de comprendre, si l'utilisateur souhaitez faire une recherche dans plusieurs colonnes/champs avec plus d'un terme de recherche, puis comment dois-je faire? Donc exemple si je recherche une table avec ces 3 champs et j'ai eu quelques données comme:

firstName | lastname | players#
  1. Michael | Jordan | 12
  2. Michael | Jordan | 24
  3. Michael | Jordan | 45
  4. DeAndre| Jordan | 6
  5. Jérôme| Jordan | 44
  6. Jordan| Des Étincelles| 88

Maintenant, si je recherche pour les Jordan, je reçois tout:

Si je recherche Michael Jordan que je devrais obtenir ligne #s 1,2,3 dos.

Si je recherche la Jordanie Étincelles 88 que je devrais en ligne # 6 dos.

Donc mon problème est que je ne sais pas où dans le tableau, le terme de recherche peut être si je doit rechercher toutes les colonnes/champs. Dans mon code, j'ai quelque chose où je vais par chaque colonne/nom du champ et utilisez le Contient() alors || ("ou"), mais elle ne fonctionne que pour 1 terme de recherche.

Est-il un élégant et facile de rechercher et filtrer à travers un ensemble de linq table, de sorte que la liste est réduite au minimum? À partir de là, je vais ajouter que suite à une source de données, puis de les lier.

@Sphinxxx je suis à l'aide d'un typique gridview. Il ressemble à ceci:

    <asp:GridView ID="GridView" runat="server" AllowSorting="True" PagerStyle-Mode="NumericPages"
                                AutoGenerateColumns="false" Width="100%" CssClass="gridView" OnPageIndexChanging="GridView_PageIndexChanging"
                                AllowPaging="True"  DataKeyNames="idPlayersList" OnRowCommand="GridView_RowCommand"
                                OnRowEditing="GridView_RowEditing" OnRowCancelingEdit="GridView_CancelEditRow"
                                OnRowUpdating="GridView_UpdateRow" OnRowDataBound="GridView_RowDataBound">
                                <RowStyle CssClass="rowStyle"></RowStyle>
                                    <asp:BoundField DataField="FirstName" HeaderText="First Name" SortExpression="FirstName" />
                                    <asp:BoundField DataField="LastName" HeaderText="Last Name" SortExpression="LastName" />
<asp:BoundField DataField="PlayersNumber" HeaderText="Players Number" SortExpression="PlayersNumber" />
<asp:TemplateField HeaderText="Team" SortExpression="Team">
                                    <EditItemTemplate>
                                        <asp:DropDownList ID="ddlTeam" runat="server" CssClass="dropdown" AutoPostBack="True"
                                            AppendDataBoundItems="true" DataTextField="TeamName" DataValueField="idTeam">
                                        </asp:DropDownList>
                                    </EditItemTemplate>
                                    <ItemTemplate>
                                        <asp:Label ID="lblTeam" runat="server" Text='<%# Bind("TeamName") %>'></asp:Label>
                                    </ItemTemplate>
                                </asp:TemplateField>

Ma fonction de recherche ressemble à quelque chose comme ceci:

/**
* This method is for button search functionality 
* 
*/
protected void btnSearch_Click(object sender, EventArgs e)
{

    //Call to Entity Model Framework
    DBModel.DBEntities context = new DBModel.DBEntities();

    string[] searchTerms = txtSearch.Text.Trim().Split('&');

//Prepare to build a "players" query:
IQueryable<DBModel.playersList> playersListQuery = context.playersLists;

foreach (var term in searchTerms)
{
    //Refine our query, one search term at a time:
    playersListQuery = playersListQuery.Where(p => p.isDeleted == false && (p.FirstName.Contains(term.Trim()) ||
                                           p.LastName.Contains(term.Trim()) ||
                                           p.PlayersNumber.Contains(term.Trim()) ||
                                           p.Team.Name.Contains(term.Trim())));
}

//Now we have the complete query. Get the results from the database:
var filteredplayersList = playersListQuery.Select(s => new
                                           {

                                               idPlayersList = s.idPlayersList,
                                               FirstName = s.FirstName,
                                               LastName = s.LastName,
                                               PlayersNumber  = s.PlayersNumber,
                                               TeamName  = s.Team.Name
                                            }).ToList();


GridView.DataSource = filteredplayersList; //Connecting query to the datasource Gridview
GridView.DataBind();  //Binding Gridview
}

OriginalL'auteur user2533789 | 2013-07-01