鑒于以下模型
public class ApiImageModel
{
public int ID { get; set; }
...
public List<TagModel> Tags { get; set; } = new();
}
和
public class TagModel
{
public int ID { get; set; }
...
public string Name { get; set; }
public List<ApiImageModel> Images { get; set; } = new();
}
如何使用 Linq 根據給定的 TagModel 集查詢 ApiImageModel 串列?我現在為此苦苦掙扎了一段時間,我當然缺少一些基本的東西,但我無法確定。
我為 EF6 嘗試了這種方法: EF6 How to query where children contains all values of a list
像這樣,將所有 TagModel-ID 保存在陣列“tagIDs”中:
int[] tagIDs;
...
IQueryable<ApiImageModel> images = context.Images.Where(image => tagIDs.All(id => image.Tags.Any(tag => tag.ID == id)));
但是 Visual Studio 會用“InvalidOperationException”獎勵我:
The LINQ expression 'DbSet<ApiImageModel>()
.Where(a => __tagIDs_0
.All(id => DbSet<Dictionary<string, object>>("ApiImageModelTagModel")
.Where(a0 => EF.Property<Nullable<int>>(a, "ID") != null && object.Equals(
objA: (object)EF.Property<Nullable<int>>(a, "ID"),
objB: (object)EF.Property<Nullable<int>>(a0, "ImagesID")))
.Join(
inner: DbSet<TagModel>(),
outerKeySelector: a0 => EF.Property<Nullable<int>>(a0, "TagsID"),
innerKeySelector: t => EF.Property<Nullable<int>>(t, "ID"),
resultSelector: (a0, t) => new TransparentIdentifier<Dictionary<string, object>, TagModel>(
Outer = a0,
Inner = t
))
.Any(ti => ti.Inner.ID == id)))' could not be translated.
我很高興能得到一些幫助:)
uj5u.com熱心網友回復:
假設您的標簽tagIDs是唯一的,您可以執行以下操作:
int[] tagIDs;
var tagCount = tagIDs.Length;
...
var images = context.Images
.Where(image => image.Tags.Where(tag => tagIDs.Contains(tag.ID)).Count() == tagCount);
在這里,我們使用Contains抓取我們感興趣的標簽,如果它們Count()等于tagIDs.Length- 所有標簽都存在于影像的標簽關系中。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/365105.html
上一篇:運行時拋出NoSuchMethodError。方法'[]'在null上被呼叫。接收器:空。嘗試呼叫:[](0)。如何解決這個錯誤?
