簡體   English   中英

試圖從(匿名類)對象linq獲取屬性/字段

[英]Attempting to obtain properties / fields from an (anonymous class) object linq is creating

我在弄清楚我在做什么錯時遇到了麻煩。 我有一些LINQ返回IQuery對象,稍后在代碼中,我試圖列出返回的屬性。 最好用以下縮寫代碼來解釋(實際的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>嗎?

您是否考慮過執行以下操作: db.Users.Select(u => new UserDto() { Id = user.Id, Name = ... ,其中UserDto是專用類,具有將來您需要的所有屬性?我認為當您從匿名類轉換為對象時,您會丟失有關屬性的信息,盡管我從未嘗試從匿名類獲取成員信息。

要將匿名類型或包含匿名類型的集合作為方法的參數傳遞,可以將參數聲明為類型對象。 但是,這樣做會破壞強鍵入的目的。 如果必須存儲查詢結果或將它們傳遞給方法邊界之外,請考慮使用普通的命名結構或類而不是匿名類型。

通過匿名類型(C#編程指南)

創建自己的類並將方法聲明更改為IQueryable<MyClass>而不是object

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM