我正在尝试修改LINQ查询以在数组中选择一些属性,但我很难实现其中的一部分。
toRun.AddRange(entity.Properties
.Select(property => property.PrimaryField)
.Select(field => new { field, entity = entity.EntityName, table = field.Table, key = entity.EntityIdField })
我需要对此进行修改,以便如果名为SecondaryField的第二个属性不为null或为空字符串,则会将其添加到第一个Select语句的结果中。
例如,如果entity.Properties包含:
Property { PrimaryField = "a", SecondaryField = "b" },
Property { PrimaryField = "c", SecondaryField = "" }
我想要返回第一个Select语句:
{ "a", "b", "c" }
感谢任何帮助。
答案 0 :(得分:3)
这似乎重现了你想要的东西:你有一个有两个属性的类:
public class Foo
{
public string Bar { get; set; }
public string Baz { get; set; }
}
你有一个集合:
var foos = new List<Foo>
{
new Foo { Bar = "a", Baz = "b" },
new Foo { Bar = "c", Baz = "" },
};
从此集合中,您希望将所有具有非空值的属性选择到数组中。
您可以使用SelectMany()
:
var result = foos.SelectMany(f => new[] { f.Bar, f.Baz })
.Where(p => !string.IsNullOrWhiteSpace(p))
.ToArray();
您选择一个包含两个属性值的新数组,然后过滤掉您不想要的值,并将结果再次转换为数组。
答案 1 :(得分:1)
这应该非常简单 - 获取两个字段,使用Where
删除null / empties并转向数组:
var result = entity.Properties.SelectMany(p =>new[]{ p.PrimaryField,p.SecondaryField})
.Where(x => !String.IsNullOrEmpty(x))
.ToArray();