我需要返回動態創建的字典的IEnumerable。LINQ的返回的IEnumerable <字典<字符串,字符串>>
僞代碼:
var x = from u in Users
select new dictionary<string, string>{
Add("Name",u.Name),
Add("LastName",u.LastName)
}
我一直想多種途徑獲得以上,但沒有成功的僞代碼示例...
我會很感激你的幫助。
我需要返回動態創建的字典的IEnumerable。LINQ的返回的IEnumerable <字典<字符串,字符串>>
僞代碼:
var x = from u in Users
select new dictionary<string, string>{
Add("Name",u.Name),
Add("LastName",u.LastName)
}
我一直想多種途徑獲得以上,但沒有成功的僞代碼示例...
我會很感激你的幫助。
var x = from u in Users
select new Dictionary<string, string> {
{ "Name", u.Name },
{ "LastName", u.LastName }
};
這件事情沒有奏效。拋出此異常,無法識別的表達式節點:ListInit 我嘗試添加和刪除後()詞典<字符串,字符串>並沒有成功...任何想法... – Tony 2010-08-03 05:52:42
@Tony,@mquander,在Users.AsEnumerable嘗試'從u ()'as'Users'可能是'IQueryable',它試圖轉換SQL腳本中的整個LINQ語句。 – 2010-08-04 05:51:03
這是對字典的糟糕用法 - 您只能將它用作屬性包,並創建與用戶一樣多的字典。
更好的使用的語言將與這些屬性創建自己的User
類,並使用:
public class User
{
public string Name { get; set; }
public string LastName { get; set; }
}
和查詢:
var users = Users.Select(u => new User
{
Name = u.Name,
LastName = u.LastName
});
如果你只使用集合白化你方法,另一種選擇是創建一個匿名類:
var users = Users.Select(u => new { Name = u.Name, LastName = u.LastName });
我完全明白這是一個非常糟糕的用途,但我不能爲我的情況提供更好的解決方案。這是整個場景......我正在創建一系列電子郵件模板。我想用regex ex動態替換一些文本:「Dear [[Name]]」 - > Replace([[Name]],Dictionary [Name] ...問題是我有多個實體可以從中收集數據。僞代碼只是使用實體用戶,但我可能有我使用User,UserCredit,UserAddress ...的情況,所以我只想返回那些在我的電子郵件模板中需要的字段,匿名類會強制我使用反射。 。 – Tony 2010-08-01 05:30:53
BTW,您的例子就像一個魅力。謝謝了Kobi – Tony 2010-08-01 05:38:24
我做了類似的事情最近,和有一個更復雜的解決方案。如果你在同一個模板需要不同的實體?'「你好[名],你」已經下令[ItemsCount]項目在$ [ItemsPrice]。請參閱Terms of Use「'。我曾與'User','Order'等一個'OrderContext'類,它可以用適當的字符串替換標記。這可能比將每個實體轉換爲字典更好。 – Kobi 2010-08-01 05:38:35
轉換方法:
public Dictionary<string, string> ToPropertyDictionary(User theUser)
{
Dictionary<string, string> result = new Dictionary<string, string>();
result.Add("Name", theUser.Name);
result.Add("LastName", theUser.Name);
return result;
}
通過調用:
IEnumerable<Dictionary<string, string>> x =
from u in Users.AsEnumerable() //ensure local execution by using AsEnumerable
select ToPropertyDictionary(u);
你得到的「無法識別的表達式節點」的錯誤是因爲LINQ to SQL中未能把字典相關的代碼轉換成SQL。您可以使用AsEnumerable()
來使編譯器使用LINQ to Objects代替:
var x = from u in Users.AsEnumerable()
select new Dictionary<string, string> {
{ "Name", u.Name },
{ "LastName", u.LastName }
};
您能否描述一下你在做什麼? IEnumerable>似乎有點奇怪,特別是當你必須硬編碼所有元素時。 –
Kobi
2010-08-01 05:28:36