尝试使用数据库中的linq检索数据。我想使用匿名类型并转换为Ilist,Array,ArrayList或Collection。数据用于接受Ilist,arraylist或集合的第三方对象。
我似乎无法让这个工作。我收到以下错误,“类型'System.String'不支持序列运算符”
using (var db = new dbDataContext())
{
var query = from e in db.people
select new
{
Count = e.LastName.Count()
};
Array test;
test = query.ToArray();
}
答案 0 :(得分:8)
将结果转换为数组列表甚至是匿名类型都没有任何关系。这是您的代码的另一个版本将失败:
using (var db = new dbDataContext())
{
var query = db.people.Select(x => x.LastName.Count());
foreach (int x in query)
{
Console.WriteLine(x);
}
}
那仍然会以同样的方式失败 - 因为它是这个位的翻译:
x => x.LastName.Count()
进入导致问题的SQL。
将其更改为:
x => x.LastName.Length
我怀疑你会发现它有效。请注意,这不是C#问题 - 它只是LINQ to SQL的翻译能力。
我建议你不在这里使用匿名类型 - 这是毫无意义的。也许这不是你的完整代码,但总的来说,如果你发现自己创建了一个只有一个成员的匿名类型,那么问问自己,这对你有什么好处。
答案 1 :(得分:2)
ArrayList类有一个接受ICollection的构造函数 您应该能够为它提供LINQ结果的List版本。
using (var db = new dbDataContext()) {
var query = from e in db.people
select new { Count = e.LastName.Count() };
ArrayList list = new ArrayList(query.ToList());
}
我这里没有Visual Studio(我在Mac上),但它可能有所帮助。 (ToArray也应该足够了)
您可能需要按长度替换Count()。