Kamil
Kamil

Reputation: 892

Find Something in List of Objects, where object value is equal to string

My classes

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

I want to select AuthToken object, which string Token is equal to ``` 123 `

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

In simply Where condition I can only compare two AuthToken objects. I need to compare AuthToken.Token strings.

Finally I want to select User who has Token I used. In this case its 123.

Upvotes: 0

Views: 181

Answers (2)

Nguyễn Văn Phong
Nguyễn Văn Phong

Reputation: 14198

You can also achieve it like below

var user = cnx._Users.Where(x => x.Tokens.FirstOrDefault(t => t.Token == "123") != null);

Upvotes: 1

Fortega
Fortega

Reputation: 19682

You can 'chain' multiple linq calls to get the result you want...

var user = cnx._Users.Where(u => u.Tokens.Any(atoken => atoken.Token == "123")).FirstOrDefault();

Upvotes: 4

Related Questions