@User99

Как выбрать уникальные значение из результатов поиска?

Помогите перевести SQL запрос на LINQ для ASP.NET MVC
select DISTINCT(KNIGI),FIO from Library
where FIO='Антонов Антон Антонович'

То есть ищу человека по ФИО и вывожу только уникальные, неповторяющиеся значения.
Один человек мог брать одну и туже книгу несколько раз. Если Антонов взял математику 10 раз, физику 5 раз, алгебру 1 раз, мне надо вывести: Математика, Физика, Алгебра. то есть только по одной
И порекомендуйте книгу по LINQ
  • Вопрос задан
  • 982 просмотра
Решения вопроса 1
@kttotto
пофиг на чем писать
db.Library.Where(x => x.FIO == "Антонов Антон Антонович").GroupBy(x => x.KNIGI).Select(x => x.First())
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@User99 Автор вопроса
var j = (from Library in db.Library
where
  Library.FIO== Антонов Антон Антонович
select new {
  Library.KNIGI,
  Library.FIO
}).Distinct() 
return View(j.ToList());

выводит ошибку при отображении
Элемент модели, переданный в словарь, имеет тип "System.Collections.Generic.List`1[<>f__AnonymousType1`2[System.String,System.String]]"
а я использовал IEnumerable
Ответ написан
Комментировать
1) https://metanit.com/sharp/tutorial/ Глава19

Пример только с метода расширения, мне они больше нравятся
https://dotnetfiddle.net/bFzudC

using System;
using System.Linq;
using System.Collections.Generic;
					
public class Program
{
	public static void Main()
	{
		var ivan = new User() { Id = 1, Name = "Ivan" };
		var vasya = new User() { Id = 2, Name = "Vasya" };
		
		var book1 = new Book() { Id = 1, Name = "1" };
		var book2 = new Book() { Id = 2, Name = "2" };
		var book3 = new Book() { Id = 3, Name = "3" };
		var book4 = new Book() { Id = 4, Name = "4" };
		
		book1.Users.Add(ivan);
		book1.Users.Add(ivan);		
		book1.Users.Add(vasya);
		book1.Users.Add(vasya);
		
		book2.Users.Add(ivan);
		book2.Users.Add(ivan);		
		book2.Users.Add(vasya);
		book2.Users.Add(vasya);
		
		
		book4.Users.Add(ivan);
		
		var booksRepository = new List<Book>();
		booksRepository.Add(book1);
		booksRepository.Add(book2);
		booksRepository.Add(book3);
		booksRepository.Add(book4);
		
		
		var result = booksRepository.Where(b => b.Users.Any(u => u.Name == "Ivan")).ToList();
		foreach (Book book in result)
		{
			Console.WriteLine(book.Name);
		}
	}
	
	public class User
	{
		public long Id {get;set;}
		public string Name {get;set;}
		
		// List<Book> ...
	}
		
	public class Book
	{
		public long Id {get;set;}
		public string Name {get;set;}
		
		public List<User> Users {get;set;}
		
		public Book(){
			Users = new List<User>();
		}
	}
}


И я так понял Books и Users имеют связи многие ко многим, т.е. откуда проще взять от туда и нужно делать запрос.

Проще было бы пойти от User, но по вашей таблице "Library", я так понял что это не так.
Возможно запись идет с датой, мол взял 10 раз и дата, условия может еще какие, по этой таблице и идет поиск, взял хотя бы 1 раз. "Any", "Contains" и т.п. с этим хорошо справятся.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы