我有一个列表,该列表为我提供了短语来源的所有元素,其中MSoftMeaning属性为null或为空:
public class PhraseSource
{
[PrimaryKey]
public string Id { get; set; }
public int PhraseNum { get; set; }
public string MSoftMeaning { get; set;
}
public static List<PhraseSource> phraseSources;
var pList = phraseSources.Where(x => string.IsNullOrEmpty(x.MSoftMeaning));
我想做的是代替获取行,而是要获取所有行号的列表或数组(称为索引),其中列表元素的MSoftMeaning为null。
因此,例如,如果第一行和第三行的MSoftMeaning为null,那么我想得到一个看起来像这样的列表(1,3)或[1,3]。
答案 0 :(得分:2)
您可以先捕获索引,然后过滤并选择原始索引:
var pList = phraseSources
.Select((item, i) => new {index = i, item = item}) // capture
.Where(x => string.IsNullOrEmpty(x.item.MSoftMeaning)) // filter
.Select(p => p.index) // select only indexes
.ToList(); // or use ToArray()
您需要首先在Select
之前以Where
捕获索引,否则在最后Select
中将获取新列表的索引。
答案 1 :(得分:1)
var pList = phraseSources.Select((x, i) => new {source = x, index = i}).Where(x => string.IsNullOrEmpty(x.source.MSoftMeaning)).Select(x => x.index).ToList();
答案 2 :(得分:0)
您可以使用Enumerable.Range
来生成索引。
Enumerable.Range(0, phraseSources.Count)
.Where(index => string.IsNullOrEmpty(phraseSources[index].MSoftMeaning));
以上内容将保留MSoftMeaning
为null的对象的所有索引,但是,如果要使用 position 而不是 index 即 index 0
是 position 1
, index 1
是 position {{1 }}, index 2
是 position 2
等,如您的帖子中所示,那么您可以执行选择操作,向每个索引加1以产生位置。
3
上面的代码将产生一个Enumerable.Range(0, phraseSources.Count)
.Where(index => string.IsNullOrEmpty(phraseSources[index].MSoftMeaning))
.Select(index => index + 1);
,其中包含元素IEnumerable<int>
;