Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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# 我在复杂的lambda查询中使用Distinct,但不起作用_C#_Linq_Asp.net Core_Entity Framework Core_Razor Pages - Fatal编程技术网

C# 我在复杂的lambda查询中使用Distinct,但不起作用

C# 我在复杂的lambda查询中使用Distinct,但不起作用,c#,linq,asp.net-core,entity-framework-core,razor-pages,C#,Linq,Asp.net Core,Entity Framework Core,Razor Pages,我想从两个没有任何关系的表中搜索 这些是我的桌子 public class News { public int Id { get; set; } public string Title { get; set; } public string FullText { get; set; } } public class SubFolder { public int Id { get; s

我想从两个没有任何关系的表中搜索 这些是我的桌子

     public class News
     {
        public int Id { get; set; }
        public string Title { get; set; }
        public string FullText { get; set; }
     }
     public class SubFolder
     {
        public int Id { get; set; }
        public string Title { get; set; }
        public string Text { get; set; }
     }
为此,我创建了一个ViewModel,并实现了IEquatable

公共类SearchViewModels:IEquatable
{
public int NewsId{get;set;}
公共字符串NewsText{get;set;}
公共字符串NewsTitle{get;set;}
public int SubId{get;set;}
公共字符串子文件夹text{get;set;}
公共字符串子文件夹标题{get;set;}
公共布尔等于([AllowFull]SearchViewModels其他)
{
//检查比较对象是否为空。
if(Object.ReferenceEquals(other,null))返回false;
//检查比较对象是否引用相同的数据。
if(Object.ReferenceEquals(this,other))返回true;
返回newsttitle.Equals(其他.newsttitle)和
NewsId.Equals(其他.NewsId)&&
NewsText.Equals(其他.NewsText)&&
子文件夹标题.Equals(其他.SubFolderTitle)&&
子文件夹文本.Equals(其他.SubFolderText)&&
SubId.Equals(其他SubId);
}
公共覆盖int GetHashCode()
{
int hashNewsText=NewsText==null?0:NewsText.GetHashCode();
int hashNewsID=NewsId==null?0:NewsId.GetHashCode();
int-hashNewsTitle=NewsTitle==null?0:NewsTitle.GetHashCode();
int hashSubTitle=SubFolderTitle==null?0:SubFolderTitle.GetHashCode();
int hashSubText=SubFolderText==null?0:SubFolderText.GetHashCode();
int hashSubId=SubId==null?0:SubId.GetHashCode();
返回hashNewsText^hashNewsID^hashNewsTitle^hashSubId^hashSubText^hashSubTitle;
}
}
我的lambda搜索查询在razor页面中:

 [BindProperty]
        public  IEnumerable<Model.SearchViewModels> SearchViewModels { get; set; }
public void OnGet(string searchParam)
    {
     
     SearchViewModels = _context.News.SelectMany(a => _context.SubFolders, (a, b) => new {a,b})
       .Where (x=>x.a.FullText.Contains( searchParam) && x.a.Active && x.b.Text.Contains( searchParam) && x.b.Publish)
    
      
       .Select(x =>new  SearchViewModels{ 
          NewsText = x.a.FullText,NewsId = x.a.Id,NewsTitle = x.a.Title, SubFolderText= x.b.Text,SubId =x.b.Id, SubFolderTitle= x.b.Title})
           .Distinct().ToList();
          
       }
}
[BindProperty]
公共IEnumerable SearchViewModels{get;set;}
public void OnGet(字符串searchParam)
{
SearchViewModels=\u context.News.SelectMany(a=>\u context.SubFolders,(a,b)=>new{a,b})
其中(x=>x.a.FullText.Contains(searchParam)&&x.a.Active&&x.b.Text.Contains(searchParam)&&x.b.Publish)
.选择(x=>new SearchViewModels{
NewsText=x.a.FullText,NewsId=x.a.Id,NewsTitle=x.a.Title,子文件夹Text=x.b.Text,SubId=x.b.Id,子文件夹Title=x.b.Title})
.Distinct().ToList();
}
}
鉴于此,请这样写

@foreach (var item in Model.SearchViewModels)
    {
        
    <div class="btn btn-primary" >@nne</div> 
        @* @item.NewsId *@ <br>
        <a href="#">@item.NewsTitle</a>
       @* @Html.Raw(item.NewsText) *@
         @* @item.SubId *@<br>
        <a href="#">@item.SubFolderTitle</a>
       @* @Html.Raw(item.SubFolderText) *@
       <hr>
       nne++;
    }
@foreach(Model.SearchViewModels中的变量项)
{
@nne
@*@item.NewsId*@
@*@Html.Raw(item.NewsText)*@ @*@item.SubId*@
@*@Html.Raw(item.SubFolderText)*@
nne++; }
我有数据,但像这样

@foreach (var item in Model.SearchViewModels)
    {
        
    <div class="btn btn-primary" >@nne</div> 
        @* @item.NewsId *@ <br>
        <a href="#">@item.NewsTitle</a>
       @* @Html.Raw(item.NewsText) *@
         @* @item.SubId *@<br>
        <a href="#">@item.SubFolderTitle</a>
       @* @Html.Raw(item.SubFolderText) *@
       <hr>
       nne++;
    }
“新闻文本_1” “子文件夹文本_1”

“新闻文本_1” “子文件夹文本_2”

“新闻文本2” “子文件夹文本_1”

“新闻文本2” “子文件夹文本_1”

我怎么会有这种感觉

@foreach (var item in Model.SearchViewModels)
    {
        
    <div class="btn btn-primary" >@nne</div> 
        @* @item.NewsId *@ <br>
        <a href="#">@item.NewsTitle</a>
       @* @Html.Raw(item.NewsText) *@
         @* @item.SubId *@<br>
        <a href="#">@item.SubFolderTitle</a>
       @* @Html.Raw(item.SubFolderText) *@
       <hr>
       nne++;
    }
“新闻文本_1” “新闻文本2”

“子文件夹文本_1” “子文件夹文本_2”

“newsText_1”“newsText_2”

“子文件夹文本_1”“子文件夹文本_2”

为了获得预期结果,您可以更改视图,如下所示:

<table class="table">
  <thead>
    <tr>
        <th></th>
    </tr>
  </thead>
  <tbody>
    <tr>
        @foreach (var item in Model.SearchViewModels.Select(s => new { s.NewsTitle }).Distinct())
        {
            <td>
                <a href="#">@item.NewsTitle</a>
            </td>
        }
    </tr>
    <tr>
        @foreach (var item in Model.SearchViewModels.Select(s => new { s.SubFolderTitle }).Distinct())
        {

        <td>
            <a href="#">@item.SubFolderTitle</a>
        </td>
        }
    </tr>
  </tbody>
</table>

@foreach(Model.SearchViewModels.Select(s=>new{s.newsttitle}).Distinct()中的var项)
{
}
@foreach(Model.SearchViewModels.Select(s=>new{s.SubFolderTitle}).Distinct()中的var项)
{
}