首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >针对集合将字符串转换为Lambda表达式

针对集合将字符串转换为Lambda表达式
EN

Stack Overflow用户
提问于 2014-11-05 23:49:30
回答 3查看 505关注 0票数 1

如何将属性选择器的字符串表示形式转换为lambda表达式?

输入的格式为:

代码语言:javascript
复制
"Child.Name"

我需要将其转换为要在OrderBy子句中使用的谓词;

代码语言:javascript
复制
query.OrderBy(x => x.Child.FirstOrDefault().Name);

如果属性不是集合,是否也有可能有一个解决方案,例如,针对标准属性或字段进行工作;

代码语言:javascript
复制
"Quantity"

将创建一个谓词,例如;

代码语言:javascript
复制
x => x.Quantity

编辑:

尝试改写上面的问题,如果我可以修改输入字符串,是否可以执行;

代码语言:javascript
复制
"Child.FirstOrDefault().Name"

作为

代码语言:javascript
复制
x => x.Child.FirstOrDefault().Name

在OrderBy中?

EN

回答 3

Stack Overflow用户

发布于 2014-11-06 00:00:06

我认为您首先需要使用Activator类型按名称获取类的实例:

代码语言:javascript
复制
var child = System.Activator.CreateInstance(Type.GetType("Assembly", "Child"));

然后,您可以使用GetProperty按名称获取属性

代码语言:javascript
复制
var childType = (typeof)child;
var name = childType.GetProperty("Name");

然后您可以将这些类型传递给您的查询。

或者,您可以使用the LINQ Predicate Builder library

票数 0
EN

Stack Overflow用户

发布于 2014-11-06 16:53:45

有一个应用程序可以解决您的问题。试试看,告诉我一些事情。

代码语言:javascript
复制
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    static class Program
    {
        /// <summary>
        /// Punto de entrada principal para la aplicación.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            List<Parent> Parents = new List<Parent>();
            List<Parent> orderedParents = Parents.Cast<Parent>().OrderBy(x => x.Cast<Child>().Select(y => y.myName)).ToList();
        }
    }

    public class Parent: IQueryable 
    {
        List<Child> child = new List<Child>();

        #region Miembros de IQueryable

        public Type ElementType
        {
            get { throw new NotImplementedException(); }
        }

        public System.Linq.Expressions.Expression Expression
        {
            get { throw new NotImplementedException(); }
        }

        public IQueryProvider Provider
        {
            get { throw new NotImplementedException(); }
        }

        #endregion

        #region Miembros de IEnumerable

        public System.Collections.IEnumerator GetEnumerator()
        {
            throw new NotImplementedException();
        }

        #endregion
    }

    public class Child: Parent 
    {
        public string myName;
    }
}
票数 0
EN

Stack Overflow用户

发布于 2014-11-06 21:29:02

下面将返回集合上属性的字符串值:

代码语言:javascript
复制
string propertyValue = source.GetType()
                .GetProperty(stringProperty)
                .GetValue(query.FirstOrDefault(), null) as string;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26761330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档