返回linq表达式的嵌套别名

时间:2010-04-22 01:20:18

标签: c# linq lambda expression expression-trees

我有以下Linq Expression

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

我需要将名称部分转换为以下字符串。

x.Cart.CartSuppliers.Name

作为其中的一部分,我将表达式转换为字符串然后拆分。并删除了First()参数。但是,当我到CartReppliers时,它返回一个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;

启用了从数组中查找单个类型。

由于

1 个答案:

答案 0 :(得分:1)

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

但是如果必须只返回一个,还要考虑使用FirstOrDefault或Single。