Enumerable.Concat无法正常工作

时间:2016-06-14 15:15:49

标签: c# asp.net linq

以下是代码:

string[] values = Acode.Split(',');
IEnumerable<Test> tst = null;

foreach (string a in values)
{
    if (tst== null)
        tst = entities.Test.Where(t=> (t.TCode == Convert.ToInt16(a)));
    else
        tst.Concat(entities.Test.Where(g => (g.TCode == Convert.ToInt16(a))));

}

return tst.ToList();

我无法获取tst中的所有记录,它只给出了数组中最后一个值的记录。

因此,如果我的数组包含1,2,3,4我只获得4的记录。而我需要在tst中附加1,2,3和4的所有结果。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:12)

Concat无法修改任何内容 - 它会返回一个您当前忽略的新序列。

但是,您应该使用Concat来平展序列,而不是使用SelectMany

string[] values = Acode.Split(',');
return values.SelectMany(a => entities.Test.Where(t => t.TCode == Convert.ToInt16(a)))
             .ToList();

或者更有效率,将values转换为List<short>然后您可以执行一个查询:

List<short> values = Acode.Split(',').Select(x => short.Parse(x)).ToList();
return entities.Test.Where(t => values.Contains(t.TCode)).ToList();

答案 1 :(得分:4)

这是因为Concat将返回您的可枚举的新实例。

要么在你的其他地方使用:

tst = tst.Concat(...)

或者从头开始将您的可枚举改为:

string[] values = Acode.Split(',');
List<Test> tst= new List<Test>;

foreach (string a in values)
{
    tst.AddRange(entities.Test.Where(g => (g.TCode == Convert.ToInt16(a))));
}

return tst;