Я использую Distinct в моем сложном лямбда-запросе, но это не работает - PullRequest
0 голосов
/ 08 апреля 2020

Я хочу найти из двух таблиц, которые не имеют никаких связей, это мои таблицы

     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 <>

 public class SearchViewModels:IEquatable<SearchViewModels>
{
    public int NewsId { get; set; }

    public string NewsText { get; set; }
    public string NewsTitle { get; set; }
    public int SubId { get; set; }
    public string SubFolderText { get; set; }
    public string SubFolderTitle { get; set; }

    public bool Equals([AllowNull] SearchViewModels other)
    {
          //Check whether the compared object is null. 
    if (Object.ReferenceEquals(other, null)) return false;

    //Check whether the compared object references the same data. 
    if (Object.ReferenceEquals(this, other)) return true;

        return NewsTitle.Equals(other.NewsTitle) && 
               NewsId.Equals(other.NewsId)&&
               NewsText.Equals(other.NewsText)&&
               SubFolderTitle.Equals(other.SubFolderTitle)&&
               SubFolderText.Equals(other.SubFolderText)&&
               SubId.Equals(other.SubId); 
    }
    public override 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();

        return hashNewsText ^ hashNewsID ^ hashNewsTitle ^ hashSubId ^ hashSubText ^ hashSubTitle;
    }
}

И мой лямбда-поисковый запрос находится на странице бритвы:

 [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();

       }
}

В поле зрения напишите вот так

@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++;
    }

Я получаю данные, но вот так

"newsText_1" "subFolderText_1"

"newsText_1" "subFolderText_2"

"newsText_2" "subFolderText_1"

"textT NewsTe

как мне это сделать

"newsText_1" "newsText_2"

"subFolderText_1" "subFolderText_2"

1 Ответ

1 голос
/ 09 апреля 2020

"newsText_1" "newsText_2"

"subFolderText_1" "subFolderText_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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...