Q: Asp.Net SelectList labels as a field of related class Is it possible to display a specific data field of a related class (one-to-many relationship) when the field is not a foreign key? If not, how to bypass this problem?
For example:
Class Pigeon
public class Pigeon
    {
        [Key]
        public string PigeonId { get; set; }

        [ForeignKey("RaceForeignKey")]
        public string RaceId { get; set; }

        public Race Race { get; set; }
        public Flock Flock { get; set; }
    }

Class Race
    public class Race
        {
            [Key]
            public string RaceId { get; set; }

            public string RaceName { get; set; } 

            public List<Pigeon> Pigeons { get; set; }
        }

The controller action:
[HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<IActionResult> Create([Bind("PigeonId,PigeonName,RingNumber,BirthDate,Sex,Description,Achievements,FlockId,RaceId,MotherId,FatherId,UserProfileId")] Pigeon pigeon)
        {
            if (ModelState.IsValid)
            {
                var user = await _userManager.GetUserAsync(HttpContext.User);
                pigeon.UserProfileId = user.Id;
                _context.Add(pigeon);
                await _context.SaveChangesAsync();
                return RedirectToAction(nameof(Index));
            }
            ViewData["FlockId"] = new SelectList(_context.Set<Flock>(), "FlockId", "FlockId", pigeon.FlockId);
            ViewData["RaceId"] = new SelectList(_context.Set<Race>(), "RaceId", "RaceId", pigeon.RaceId);
            ViewData["UserProfileId"] = new SelectList(_context.UserProfile, "Id", "Id", pigeon.UserProfileId);
            return View(pigeon);
        }

The View: 
 <div class="form-group">
                <label asp-for="RaceId" class="control-label"></label>
                <select asp-for="RaceId" class ="form-control" asp-items="ViewBag.RaceId"></select>
            </div>

The result is 
How to Include the Race class to the Pigeon class to display RaceName instead of RaceId in the Dropdown list?

A: You can use this overload of SelectList constructor:

SelectList(IEnumerable, String, String, Object)
Initializes a new instance of the SelectList class by using the specified items for the
list, the data value field, the data text field, and a selected value.

so, changing your parameter, solve your problem
ViewData["RaceId"] = new SelectList(_context.Set<Race>(), "RaceId", "RaceName", pigeon.RaceId);


A: The solution of the problem turned out to be the GET method.
I edited POST Create() method and GET Create() method should be edited also.
Now every of your proposed solutions works. 
Thanks for replies, unfortunatelly I can't vote up your replies yet.
