以下是代码:
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的所有结果。
任何帮助将不胜感激。
答案 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;