私はいろいろ調べて、同様の質問をたくさん見ましたが、まだこれを理解できません。Assets と Tags の 2 つのクラスがあります。それらの定義は次のとおりです。
public class Asset
{
[Key]
public int AssetID { get; set; }
public decimal? Height { get; set; }
public decimal? Width { get; set; }
public decimal? Depth { get; set; }
public decimal? Radius { get; set; }
public string Name { get; set; }
[Display(Name = "Manufacturer")]
public int ManufacturerID { get; set; }
[Display(Name = "Type")]
public int PackageTypeID { get; set; }
public virtual Manufacturer Manufacturer { get; set; }
public virtual PackageType PackageType { get; set; }
public virtual ICollection<Tag> Tags { get; set; }
}
public class Tag
{
public int TagID { get; set; }
public string Key { get; set; }
public string Value { get; set; }
public virtual ICollection<Asset> Assets { get; set; }
}
Asset Index ページに検索ボックスがあり、Asset.Name、Manufacturer.Name、Asset.Tag.Key、および Asset.Tag.Value を検索できるようにしたいと考えています。これが私がこれまでに得たものです。
var assets = from a in db.Assets
select a;
if (!String.IsNullOrEmpty(searchString))
{
assets = assets.Where(a => a.Name.ToUpper().Contains(searchString.ToUpper())
|| a.Manufacturer.Name.ToUpper().Contains(searchString.ToUpper()));
}
さて、Tag.KeyまたはTag.Valueにアクセス/検索する方法がわかりません。LINQ クエリであらゆる種類の結合を試しましたが、十分に賢くありません。
どんな助けでも大歓迎です。