我有如下Manufacturer
實體:在Linq查詢使用動態顯示名稱作爲別名從實體
class Manufacturer
{
[Key]
public int Id { get; set; }
[DisplayName("Manufacturer Code")]
public int Code { get; set; }
[DisplayName("Manufacturer Name")]
public string Name { get; set; }
}
正如你看到的每一個申請都DisplayName
數據註解。在正常的方式通過我下面的代碼選擇製造商表中的行:
dataGridView1.DataSource = DatabaseContext.Set<Manufacturer>()
.Select(m => new
{
Id = m.Id,
Code = m.Code,
Name = m.Name,
})
.ToList();
我想找到一種方式,把動態顯示名稱爲Linq查詢別名。
我想我一定是生成查詢像一個方法:
dataGridView1.DataSource = DatabaseContext.Set<Manufacturer>()
.Select(m => new
{
Id = m.Id,
[Manufacturer Code] = m.Code,
[Manufacturer Name] = m.Name,
})
.ToList();
我可以通過下面的代碼獲得所有DisplayName
:
public static Dictionary<string, string> GetEntityDisplayName(this Type type)
{
return TypeDescriptor.GetProperties(type)
.Cast<PropertyDescriptor>()
.ToDictionary(p => p.Name, p => p.DisplayName);
}
,但不知道如何做到這一點。有什麼辦法可以把DisplayName
作爲的別名動態查詢嗎?
更新: 作爲答案之一,當使用.ToList
獲取各行從實體交回該項目與DisplayNameAttribute
,但新事物的模型的列表說的是當創建的LINQ查詢使用2實體,列出項目在查詢中您確切說的行。例如:
class Manufacturer
{
[Key]
public int Id { get; set; }
[DisplayName("Manufacturer Code")]
public int Code { get; set; }
[DisplayName("Manufacturer Name")]
public string Name { get; set; }
}
和:
class Good
{
[Key]
[DisplayName("ID")]
public int Id { get; set; }
[DisplayName("Good Name")]
public string Name { get; set; }
public int? ManufacturerId { get; set; }
public virtual Manufacturer Manufacturer { get; set; }
}
和查詢:
using (AppDbContext db = new AppDbContext())
{
var res2 = db.Goods.Select(m => new
{
Id = m.Id,
GoodsName = m.Name,
ManufacturerName = m.Manufacturer.Name,
}).ToList();
dataGridView1.DataSource = res2;
}
當你在這種情況下看,因爲查詢有2名場,必須聲明爲不同的別名他們並不等於實體中的DisplayNameAttribute
。有沒有人知道一種方法來投影與實體中定義的DisplayNameAttribute
相同的輸出列表?
這是否適合您的要求? https://stackoverflow.com/a/27275258/3296133 - 這篇文章中的方法需要一個類型,並創建一個數據表,然後您可以根據需要綁定到datagridview。 – DeeKayy90
@ DeeKayy90我想把別名放在Linq查詢中......對此有建議嗎? –
我認爲這個問題更多,你爲什麼要在你的LINQ查詢中使用別名?您的查詢大概會進入數據庫,因此您需要實際的「Name」字段才能轉換爲SQL。 我認爲你應該尋找翻譯你的查詢結果,如果這是你的目標? – dougajmcdonald