Вернуть вложенный псевдоним для выражения linq - PullRequest
0 голосов
/ 22 апреля 2010

У меня есть следующее выражение 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;

, что позволило найти отдельный тип из массива.

Спасибо

1 Ответ

1 голос
/ 22 апреля 2010
firstSupplierWithNeededName = shoppers
    .SelectMany(s => s.Cart.CartSuppliers)
    .First(s => s.Name == "Supplier1");

Но также обратите внимание на использование FirstOrDefault или Single, если он должен возвращать только один.

...