gpt4 book ai didi

c# - 如何使用 LINQ 查询列表

转载 作者:太空宇宙 更新时间:2023-11-03 21:02:44 24 4
gpt4 key购买 nike

List<T> objectList = GetList();

foreach (T setName in setNames)
{
List<T> list = objectList.Where(x => x.QualificationID == setName).ToList();
redisClient.SetAdd<string>("Qualification:" + setName, list.Select(x => x.ProductID).ToString());
}

在第 3 行中,T 不包含“QualificationID”的定义,并且找不到接受类型 T 的第一个参数的扩展方法“QualificationID”。

与第 4 行类似,T 不包含“ProductID”的定义,并且找不到接受类型 T 的第一个参数的扩展方法“ProductID”。

我们如何使用 linq 过滤通用对象列表?

编辑: 在指定类类型之前,我们发现无法在通用方法中过滤属性值。就像将方法扩展到,

method() where T : ClassType

如答案和评论中所指定。

最佳答案

假设您有一个基类型 BaseType,它具有公共(public)成员 QualificiationIDProductID,您可以执行以下操作:

void Foo<T>() where T : BaseType
{
List<T> objectList = GetList();

foreach (T setName in setNames)
{
List<T> list = objectList.Where(x => x.QualificationID == setName).ToList();
redisClient.SetAdd<string>("Qualification:" + setName, list.Select(x => x.ProductID).ToString());
}
}

这假设泛型类型特定于方法。如果它是类级泛型,只需将 where T : BaseType 移动到类声明中的相应位置即可。


作为次要点,您的第二个 .Select 调用的 ToString() 部分可能没有按照您认为的那样进行。 ToString 会尝试将对象转换为字符串,默认情况下会返回类型名称。这意味着您从中得到的所有内容都符合 "System.Linq.IEnumerable+WhereSelectEnumerableIterator`1"。为了实际从 LINQ 中获取字符串,您必须将其提供给字符串构造函数并稍微更改它:

redisClient.SetAdd<string>("Qualification:" + setName, String.Join("", list.Select(x => x.ProductID.ToString()));

关于c# - 如何使用 LINQ 查询列表 <T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43715964/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com