Мои занятия

public class User
{
    [Key]
    public long Id {get;set;}
    public ICollection<AuthToken> Tokens { get; set; } = new List<AuthToken>();
}

public class AuthToken
{
    [Key]
    public long id { get; set; }
    public string Token { get; set; }
    public long Created { get; set; }
    public long Dispose { get; set; }
    public string Ip { get; set; }
    public string LocalisationInfo { get; set; }
    public string MachineInfo { get; set; }
}

Я хочу выбрать объект AuthToken, который string Token равен `` `123`

var user = cnx._Users
              .Where(x => x.Tokens.Contains(/*Tokens.Token object equal to 123 */))

В простом Where состоянии я могу сравнить только два AuthToken объекта. Мне нужно сравнить строки AuthToken.Token.

Наконец, я хочу выбрать пользователя с Token, который я использовал. В этом случае его 123.

0
Kamil 12 Фев 2020 в 16:28

2 ответа

Лучший ответ

Вы можете «связать» несколько вызовов linq, чтобы получить желаемый результат ...

var user = cnx._Users.Where(u => u.Tokens.Any(atoken => atoken.Token == "123")).FirstOrDefault();
4
Kamil 12 Фев 2020 в 13:44

Вы также можете достичь этого, как показано ниже

var user = cnx._Users.Where(x => x.Tokens.FirstOrDefault(t => t.Token == "123") != null);
1
Phong 12 Фев 2020 в 13:49