我有List,其中myObj拥有自己的对象列表,称为示例mySubObj。
对象mySubObj具有属性字符串Name。
所以我想基于mySubObj的prop字符串Name创建新的List。
我写了这段代码,但似乎是错误的:
var por = msgs.Where(x => x.Parameters
.Where(p => p.ParameterName == s).Count() == 1);
有人可以帮助我使用LINQ吗?
编辑:这是整个代码:
foreach (string s in parameters)
{
using (StreamWriter streamWriter = new StreamWriter(outputFolder + "/" + s + ".xls"))
{
streamWriter.Write("No.\tMessage\tMS\tTime\tSC");
var por = (from m in msgs
from p in m.Parameters
where p.ParameterName == s
select m).Distinct();
List<string> headeri = new List<string>();
List<string> vrijednosti = new List<string>();
foreach (L3Message p in por)
{
foreach (Parameter pam in p.Parameters)
{
TraverseForHeaders(pam, ref headeri);
}
}
foreach (string head in headeri)
{
streamWriter.Write("\t" + head);
}
streamWriter.Write("\n");
编辑2:
这是我的两个类,应对此进行更详细的说明:
public class L3Message
{
public int Number { get; set; }
public string MessageName { get; set; }
public string Device { get; set; }
public string Time { get; set; }
public string ScramblingCode { get; set; }
public List<Parameter> Parameters { get; set; }
public L3Message()
{
Parameters = new List<Parameter>();
}}
public class Parameter
{
public int numOfWhitespaces { get; set; }
public string ParameterName { get; set; }
public string ParameterValue { get; set; }
public Parameter Parent { get; set; }
public List<Parameter> SubParameters { get; set; }
public Parameter()
{
SubParameters = new List<Parameter>();
}
}
最佳答案
在您要创建“树”并删除所有由名称指定的参数之外的所有参数时,我的理解。您应该为此创建Message的副本,因为如果没有,您将更改原始副本并且无法恢复“丢失”的参数(我这样说是因为您在注释中说您希望它是临时的)。
因此,此代码应大致如下所示:
var por = (from m in messages
from p in m.Parameters
where p.ParameterName == s
select new L3Message { Number = m.Number, ..., Parameters = new List<Parameter> { p } }
);
代替“ ...”,您必须从消息中复制其他参数。
综上所述,暂时删除这些属性对于您遇到的任何问题似乎都是不好的解决方案。如果要将此方法传递给另一个方法,是否不能更改此方法以告知它应查看的属性?
编辑:固定代码(第二次)
Edit2:再次修正代码(现在重复的属性会导致其他消息,另请参见我的替代答案。