gpt4 book ai didi

c# - 试图从(匿名类)对象获取属性/字段 linq 正在创建

转载 作者:行者123 更新时间:2023-11-30 20:55:24 26 4
gpt4 key购买 nike

我无法弄清楚我在这里做错了什么。我有一些返回 IQuery 的 LINQ对象,稍后在代码中,我试图列出返回的属性。这段缩写代码对此进行了最好的解释(实际的 LINQ 复杂得多并且涉及连接 - LINQ 本身工作正常):

public IQueryable<Object> FindAll()
{
var query = from user in _db.Users
select new
{
id = user.Id,
is_active = user.IsActive,
email = user.Email,
dob = user.Dob,
user.user_type,
};
return query;
}

我在代码的其他地方:

query.ConvertToCsv();

虽然我试图插入一个 .ToList()也在那个电话中。

ConvertToCsv有:

public static string ConvertToCSV<TSource>(this IEnumerable<TSource> source)
{
StringBuilder sb = new StringBuilder();

var properties = typeof(TSource).GetFields(BindingFlags.NonPublic | BindingFlags.Instance);

var enumerable = source as IList<TSource> ?? source.ToList();
if (!enumerable.Any()) return "";

string headerString = "";

foreach (var prop in properties)
{
headerString += (headerString.Length > 0 ? "," : "") + prop.Name;
}
sb.AppendLine(headerString);

foreach (TSource item in enumerable)
{
string line = string.Join(",", properties.Select(p => p.GetValue(item).ToCsvValue()).ToArray());
sb.AppendLine(line);
}

return sb.ToString();
}

请注意,我还尝试使用此代码提取属性名称:

PropertyInfo[] pi = typeof(TSource).GetProperties(BindingFlags.Public | BindingFlags.Instance);
var properties = pi.OrderBy(x => x.MetadataToken);
foreach (PropertyInfo p in properties)
{ etc etc }

在所有情况下,属性或字段列表都会返回一个空列表,因此,我无法遍历对象以吐出标题行或数据行。跟踪所有代码并检查变量表明在我到达 GetProperties 之前一切都很好/GetFields行和代码失败。

我犯了什么菜鸟错误?我应该更换 <Object> 吗?与其他东西?

最佳答案

To pass an anonymous type, or a collection that contains anonymous types, as an argument to a method, you can declare the parameter as type object. However, doing this defeats the purpose of strong typing. If you must store query results or pass them outside the method boundary, consider using an ordinary named struct or class instead of an anonymous type.

来自Anonymous Types (C# Programming Guide)

创建您自己的类并将方法声明更改为 IQueryable<MyClass>而不是 object

关于c# - 试图从(匿名类)对象获取属性/字段 linq 正在创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18334099/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com