第一個模型:
public class Group
{
public string Name { get; set; }
public string Sid { get; set; }
}
第二種型號:
public class GuidelinesWorkTeam
{
public int Id { get; set; }
public string Name { get; set; }
public string Sid { get; set; }
public bool Active { get; set; }
}
我有這個方法:
public IEnumerable<GuidelinesWorkTeam> GetWorkTeamsWhereChangeName(
IEnumerable<Group> adGroups,
IEnumerable<GuidelinesWorkTeam> gwtItems)
{
return gwtItems.Where(gwtItem => adGroups.Any(adGroup => gwtItem.Sid == adGroup.Sid && gwtItem.Name != adGroup.Name));
}
廣告組輸入
| 目的 | 姓名 | 席德 |
|---|---|---|
| [0] | 作業組1 | 西德1 |
| [1] | 作業組3 | 西德2 |
gwtItems 輸入
| 目的 | ID | 姓名 | 席德 | 積極的 |
|---|---|---|---|---|
| [0] | 1 | 作業組1 | 西德1 | 真的 |
| [1] | 2 | 作業組2 | 西德2 | 真的 |
期望的結果
| 目的 | ID | 姓名 | 席德 | 積極的 |
|---|---|---|---|---|
| [0] | 2 | 作業組3 | 西德2 | 真的 |
演示在這里
如果滿足上述條件,我需要回傳一個IEnumerable<GuidelinesWorkTeam>(或其他 IEnumerable,因為我只需要adGroup.Nameand )元素,但用.gwtItem.IdgwtItem.NameadGroup.Name
我怎樣才能做到這一點?
uj5u.com熱心網友回復:
根據我對您問題的理解,我想提出兩種不同的方法來解決它:
- 在將專案與專案
adGroups關聯之前過濾專案adGroupsgwtItems gwtItems(像您已經完成的那樣過濾專案,然后)將gwtItems專案與adGroups專案相關聯
根據最初過濾的變數(adGroups或gwtItems)最受益,您可以選擇最適合您的用例的方法。
過濾adGroups專案,然后將它們與gwtItems專案相關聯
在這里,所有適用的專案 fromadGroups被分組,然后基于gwtItem 的值將Sid每個Sid基于的分組與專案相關聯。在使用將分組和相等(和不相等,由于 的初始過濾)關聯之后,我們在 a 中選擇每個關聯的 adGroup 和 gwtItem 對,并使用來展平集合(從 a到 a )。gwtItemsSidadGroupsgwtItemsSidNameadGroups.Join()adGroup.NamegwtItem.IdtupleSelectMany()IEnumerable<IEnumerable< * >>IEnumerable< * >
public IEnumerable<( string Name, int Id )> GetWorkTeamsWhereChangeName(
IEnumerable<Group> adGroups,
IEnumerable<GuidelinesWorkTeam> gwtItems)
{
return adGroups
.Where(adGroup => gwtItems.Any(gwtItem =>
gwtItem.Sid == adGroup.Sid &&
gwtItem.Name != adGroup.Name))
.GroupBy(adGroup => adGroup.Sid)
.Join(gwtItems,
grouping => grouping.Key,
gwtItem => gwtItem.Sid,
( grouping, gwtItem ) => grouping
.Select(adGroup => ( adGroup.Name, gwtItem.Id )))
.SelectMany(_ => _);
}
將gwtItems專案與adGroups專案相關聯(在過濾第一個之后gwtItems)
在這里,專案 fromgwtItems首先根據各個類adGroups的屬性與專案 from 相關聯,在操作回傳包含相關資訊的元組之前使用;然后,僅選擇實際具有不同名稱的關聯項并將其轉換為更簡單的元組。Sid.Join().Join()
gwtItems如果可能會從;中過濾掉許多專案,則可能應該包括您的原始過濾。但沒有必要獲得所需的結果。
public IEnumerable<( string Name, int Id )> GetWorkTeamsWhereChangeName(
IEnumerable<Group> adGroups,
IEnumerable<GuidelinesWorkTeam> gwtItems)
{
return gwtItems
// Original filtering
.Where(gwtItem => adGroups.Any(adGroup =>
gwtItem.Sid == adGroup.Sid &&
gwtItem.Name != adGroup.Name))
// Association and final filtering
.Join(adGroups,
gwtItem => gwtItem.Sid,
adGroup => adGroup.Sid,
( gwtItem, adGroup ) => (
ChangedName: gwtItem.Name != adGroup.Name,
Name: adGroup.Name,
Id: gwtItem.Id))
.Where(workTeam => workTeam.ChangedName)
.Select(workTeam => ( workTeam.Name, workTeam.Id ));
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/438271.html
上一篇:根據序列號回傳最近的記錄
