Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取完全相同的结果集_C#_Sql_Linq_Full Text Search - Fatal编程技术网

C# 获取完全相同的结果集

C# 获取完全相同的结果集,c#,sql,linq,full-text-search,C#,Sql,Linq,Full Text Search,我刚才看到的另一件事是,您提到您正在使用LINQ to SQL查询,您可以通过在SQL表中创建一个连接多列值的来应用相同的方法,您可以从SQL Server 2012开始这样做 希望有人发现这个解决方案很有帮助 问候 所以如果我理解正确的话,它会去查询表中searchTerm数组大小的次数。在循环的每次迭代中,它会生成一个表,在下一次迭代中,会生成一个较小的过滤表,它是filteredPlayers变量。不,这就是Linq2SQL的优点:foreach循环只准备一个查询(一个IQueryable

我刚才看到的另一件事是,您提到您正在使用LINQ to SQL查询,您可以通过在SQL表中创建一个连接多列值的来应用相同的方法,您可以从SQL Server 2012开始这样做

希望有人发现这个解决方案很有帮助


问候

所以如果我理解正确的话,它会去查询表中searchTerm数组大小的次数。在循环的每次迭代中,它会生成一个表,在下一次迭代中,会生成一个较小的过滤表,它是filteredPlayers变量。不,这就是Linq2SQL的优点:
foreach
循环只准备一个查询(一个
IQueryable
)。只有在请求
IQueryable
中的元素时,才会实际查询数据库表,这在最后对
.ToArray()
的调用中隐式发生。运行代码并查看
sql
字符串-只有一个sql查询(包含X个and语句)。如果我有一个Teams表的外键(fk),该怎么办。我是不是可以这样做:playersQuery=playersQuery.Where(p=>p.firstName.Contains(term)| | p.lastName.Contains(term)| p.playersNum.Contains(term)| | p.Teams.Name.Contains(术语));>如果是这样,我将得到一个类似于以下内容的错误:Sys.WebForms.PageRequestManagerServerErrorException:Sys.WebForms.PageRequestManagerServerErrorException:DataBinding:'DBModel.Players'不包含名为'TeamName'的属性。我正在尝试绑定到gridview。GridView.DataSource=filteredRangeList;GridView.DataBind();1:是的,FK查询应该按照您编写的方式工作。2:我只是在猜测,但这个错误似乎来自
GridView
,而不是sql查询。网格是否设置了查找“TeamName”属性的列?如果是这样的话,
DBModel.Players
类需要有一个名为“TeamName”的属性。这是什么样的
GridView
?WinForms?可能与
    <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>
/**
* 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
}
string[] searchTerms = "Jordan Sparks 88".Split(' ');

using (var dc = new MyDataContext())
{
    //Using DataContext.Log is handy 
    //if we want to look at Linq2SQL's generated SQL:
    dc.Log = new System.IO.StringWriter();

    //Prepare to build a "players" query:
    IQueryable<Player> playersQuery = dc.Players;

    //Refine our query, one search term at a time:
    foreach (var term in searchTerms)
    {
        //Create (and use) a local variable of the search term
        //to avoid the "outer variable trap":
        //http://stackoverflow.com/questions/3416758
        //http://stackoverflow.com/questions/295593
        var currentTerm = term.Trim();
        playersQuery = playersQuery.Where(p => (p.isDeleted == false)
                                                &&
                                               (p.FirstName.Contains(currentTerm) ||
                                                p.LastName.Contains(currentTerm) ||
                                                p.PlayersNumber.Contains(currentTerm) ||
                                                p.Team.Name.Contains(currentTerm))
                                            );
    }

    //Now we have the complete query. Get the results from the database:
    var filteredPlayers = playersQuery.Select(p => new
                                                   {
                                                       p.idPlayer,
                                                       p.FirstName,
                                                       p.LastName,
                                                       p.PlayersNumber,
                                                       TeamName = p.Team.Name
                                                   })
                                      .ToArray();

    //See if the generated SQL looked like it was supposed to:
    var sql = dc.Log.ToString();
}
public class Player
{
    public string SearchField { get => string.Format("{0}{1}{2}{3}",FirstName,LastName,PlayersNumber,Team); }

    public string FirstName {get; set;}

    public string LastName {get; set;}

    public string PlayersNumber {get; set;}

    public string Team {get; set;}
}
public string SearchField { get; private set; }

public Player(string firstName, string lastName, playersNumber, string team)
{
    FirstName = firstName;
    LastName = lastName;
    PlayersNumber = playersNumber;
    Team = team;
    SearchField = string.Format("{0}{1}{2}{3}",firstName,lastName,playersNumber,team);
}
 foreach (var term in searchTerms)
 {
     var currentTerm = term.Trim();
     playersQuery = playersQuery.Where(p => p.isDeleted == false && 
                                            p.SearchField.Contains(currentTerm));
 }