我已经购买了物品和装备物品,我需要购买装备物品中的物品。我尝试了这个但是在x.Id == 2
时它给了我第1项和第2项。
user.BoughtItems.Where(x => equippedItems.Any(any => any.Id == x.Id))
使用以下方法进行测试:
BoughtItems有2件物品。一个Id = 1,两个Id = 2。
EquippedItems有1项Id = 2。
我期待一个项目(来自BoughtItems)的结果,id = 2。
答案 0 :(得分:1)
试试这个:
var equippedIds = equippedItems.Select(x => x.Id).ToHashSet();
var boughtAndEquipped = user.BoughtItems.Where(x => equippedIds.Contains(x.Id));
编辑:忘记了.ToHashSet()
未内置,因为我在每个项目中都包含一些linq扩展。这是:
public static class Extensions
{
public static HashSet<T> ToHashSet<T>(this IEnumerable<T> source)
{
return new HashSet<T>(source);
}
}
答案 1 :(得分:1)
static void Main(string[] args)
{
int[] BoughtItems = { 1, 2 };
int[] equippedItems = { 1 };
var result = BoughtItems.Where(x => equippedItems.Any(any => any == x));
foreach (var el in result)
Console.WriteLine(el);
}
结果:1
你能展示你拥有什么以及你需要什么,因为现在我看不出你所说的问题。
顺便说一句,这个结果相同:
class Itemm
{
public int Id { get; set; }
}
static void Main(string[] args)
{
List<Itemm> BoughtItems = new List<Itemm>() { new Itemm { Id = 1 }, new Itemm { Id = 2 } };
List<Itemm> equippedItems = new List<Itemm>() { new Itemm { Id = 1 } };
var result = BoughtItems.Where(x => equippedItems.Any(any => any.Id == x.Id));
foreach (var el in result)
Console.WriteLine(el.Id);
}
结果:1
答案 2 :(得分:0)
只需使用加入:
boughtItems.Join(equippedItems,b=>b.Id,eq=>eq.Id,(b,eq)=>b.Id);
这将返回ID。如果你想要两个项目,你可以通过用 Tuple.Create
(b,eq)=&gt; b.Id 来创建一个元组。 >然后,您可以使用&#34; Item1&#34;访问已购买和配备的相关项目。和&#34; Item2&#34;分别返回实例的属性。