Enumerable.Concat无法正常工作

Sur*_*rya 8 c# linq asp.net

以下是代码:

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();
Run Code Online (Sandbox Code Playgroud)

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

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

任何帮助将不胜感激.

Jon*_*eet 12

Concat 不修改任何东西 - 它返回一个你当前忽略的新序列.

但是,Concat您应该使用SelectMany以平整序列而不是使用它:

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

或者更有效率,转换values为a List<short>然后你可以做一个查询:

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


Sid*_*r94 5

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

可以在其他情况下使用:

tst = tst.Concat(...)

或从头开始将您的Enumerable更改为列表:

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;
Run Code Online (Sandbox Code Playgroud)