我有一个包含3列的ef连接表。我想从其中两个中选择不同的值。
我想通过ResourceId和MetaDataId选择不同的行。 所以我希望它在这种情况下返回行(1,3和4)。 我试过这个:
ctx.ResourceMetas.Where(a => a.ResourceId == resourceid).Distinct()});
但显然这会从三者中获得明显的价值。我能以某种方式选择从两者中脱颖而出吗?
答案 0 :(得分:1)
您可以按不同的值进行分组,然后获取剩余的最大值或最小值。
如果您只有一个字段,可以这样做:
ctx.ResourceMetas
.GroupBy(x=>new{x.ResourceId, x.MetaDataId})
.Select
(
x=>new
{
MetaListId = x.Min(m=>m.MetaListId ),
ResourceId = x.Key.ResourceId,
MetaDataId = x.Key.MetaDataId
}
)
.Where(a => a.ResourceId == resourceid)
但是在一个场景中你想要超过三个的2个字段的不同值,那么你必须这样做:
ctx.ResourceMetas
.GroupBy(x=>new{x.ResourceId, x.MetaDataId})
.Select
(
x=>new
{
MetaListId = x.Where(i=>i.MetaListId == x.Min(m=>m.MetaListId)).FirstOrDefault().MetaListId ,
OtherField = x.Where(i=>i.MetaListId == x.Min(m=>m.MetaListId)).FirstOrDefault().OtherField ,
ResourceId = x.Key.ResourceId,
MetaDataId = x.Key.MetaDataId
}
)
.Where(a => a.ResourceId == resourceid)