2010-04-22 87 views
0

我有以下的LINQ表達式返回嵌套的別名LINQ表達

var tooDeep = shoppers 
    .Where(x => x.Cart.CartSuppliers.First().Name == "Supplier1") 
    .ToList(); 

我需要把名字部分進入下面的字符串。

x.Cart.CartSuppliers.Name 

作爲這個的一部分,我把表達式轉換成一個字符串,然後分割。並刪除了First()參數。但是,當我到達CartSuppliers時,將返回一個Suppliers []數組。有沒有辦法從這個單一的類型。例如。我需要找回供應商。

更新:得到它的工作

var fullName = m.ToString().Split(new[] { '.' }, StringSplitOptions.RemoveEmptyEntries); 
// this supports the "deep graph" name - "Product.Address.City" 
var fixedName = fullName.Skip(1).Take(fullName.Length - 1) 
.Where(x => x != "First()") 
.Select(x => System.Text.RegularExpressions.Regex.Replace(x, @"\[[0-9]+\]","")) 
.ToArray(); 

與此:

var prop = property.PropertyType.HasElementType ? property.PropertyType.GetElementType() property.PropertyType; 

這使是找到一個數組中的各個類型。

感謝

+0

對不起,您在此行上丟失了我:我需要將名稱部分轉換爲以下字符串。 x.Cart.CartSuppliers.Name – 2010-04-22 01:48:04

回答

1
firstSupplierWithNeededName = shoppers 
    .SelectMany(s => s.Cart.CartSuppliers) 
    .First(s => s.Name == "Supplier1"); 

但也考慮使用FirstOrDefault或單是否具有隻有一個返回。

+0

我在說解析表達式樹。我知道查詢可以用其他方式編寫,但那不是重點。 – Schotime 2010-04-22 01:38:49

+0

你可以爲你的問題添加更多的細節嗎? – 2010-04-22 02:51:17