您可以通过确定对象名称来从Linq返回POCO对象的属性吗?

詹加爵士

基本概念是我想从签名方法的输入中获得“财产”回报。不是属性背后的数据。EG:如果我选择“ DEV”,我想获得名为“ DEV”的POCO类属性,而不是存储在POCO类的一部分中的数据。

最终目标是创建一个SQL部署脚本制作器,使环境在每个环境上可能具有不同的命名数据库(不要相信我的选择)。在示例中,在现实世界中很简单,没有像在任何名称后附加“ QA”或“ UAT”之类的字符串那样简单。有人根本没有遵循任何命名规则,只是随机地给事物命名,所以我找到并进行了收集,基本上将进行文本搜索以找到并替换它。我正在制作一个拥有不同名称的POCO对象。我意识到我可能必须对对象进行规范化和更改,但我很好奇是否可以循环处理POCO类的“属性”,而不必做1,环境,名称,2,环境,名称等

代码:

namespace SQL_Deployer
{
    public class DatabaseListing
    {
        public string DatabaseName { get; set; }
        public string Dev { get; set; }
        public string DEMO { get; set; }
        public string QA { get; set; }
        public string UAT { get; set; }
        public string PROD { get; set; }
    }

    public class DatabaseListings
    {
        protected static List<DatabaseListing> DataBaseListings { get; set; }

        public DatabaseListings()
        {
            DataBaseListings = returnDatabaseListings();
        }

        private List<DatabaseListing> returnDatabaseListings()
        {
            return new List<DatabaseListing>{
                new DatabaseListing{DatabaseName = "Main", Dev="Main", DEMO = "MainDemo", QA="MainQA", UAT="MainUAT", PROD="MainPROD"},
                new DatabaseListing{DatabaseName = "Sub", Dev="Sub", DEMO = "SubDemo", QA="SubQA", UAT="SubUAT", PROD="SubPROD"}
            };
        }
    }
}

namespace SQL_Deployer
{
    public class SQL_Rewriter : DatabaseListings
    {
        private string _fileLocationSource;
        private string _fileLocationTarget;
        public string FileTextOriginal;
        public string FileTextChanged;

        public SQL_Rewriter(string aSourceFile, string aTargetFile)
        {
            _fileLocationSource = aSourceFile;
            _fileLocationTarget = aTargetFile;
        }

        public void GetTextFromFile()
        {
            if (_fileLocationSource != null)
                FileTextOriginal = File.ReadAllText(_fileLocationSource).ToUpper();
            else
                FileTextOriginal = "COULD NOT READ";
        }

        public void ChangeTextToNewFormat()
        {
            if (FileTextOriginal != null)
            {
                List<string> distinctEnvironments = new List<string> { "Dev", "DEMO", "QA", "UAT", "PROD" };

                Dictionary<string, string> names = new Dictionary<string, string>();

                distinctEnvironments.ForEach(x =>
                    names.Add( 
                        x,
                        DataBaseListings.FirstOrDefault(y => y.DatabaseName == "Review").x  // I want the 'property' extenstion of the object matching the 'distinctEnvironments' List I set above
                        )
                    );

                // I should now have a dictionary for my environment with each enviroment 'property' I could loop through to find and replace text in a file.

                foreach(var replace in names)
                {
                    FileTextOriginal.Replace(replace.Key, replace.Value);

                    //TODO Write out file for each envionrment to sub directory in main placement.
                }
            }
            else if (FileTextOriginal == "COULD NOT READ")
                FileTextChanged = "COULD NOT READ INPUT";
            else
                FileTextChanged = "NO VALID INPUT TO READ";
        }
    }
}
斯坦利

当然,使用反射:

var QAprop = typeof(DatabaseListing).GetProperty("QA");

或遍历所有属性:

foreach(var prop in typeof(DatabaseListing).GetProperties())
    string name = prop.Name;

从那里您可以获取属性的类型,属性等。

您将不得不再次使用反射来获取值:

distinctEnvironments.ForEach(x =>
    names.Add( 
        x,
        typeof(DatabaseListing).GetProperty(x)
                               .GetValue(DataBaseListings.FirstOrDefault(y => y.DatabaseName == "Review"), null) 
        )

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在<>中使用对象名称,因为新的ArrayList <String>是正确的,或者只使用<>可以吗?

您可以遍历雄辩对象的属性吗?

您可以评估JS对象中的属性名称吗?

Javascript-有没有一种方法可以通过对象名称作为字符串来测试对象的instanceof

通过对象名称在Javascript中移动对象的键

手把可以循环访问唯一的对象名称吗?

ExecuteSqlCommand返回“无效的对象名称”错误

通过对象名称动态访问对象属性

您可以使用instanceOf来确定对象是否为数组,然后在该数组上进行迭代吗?

如何通过使用变量来引用冗长的对象名称和方法来简化Python代码?

检索对象名称

如何通过对象名称动态检索对象属性?

JSON对象名称返回为ID

您可以生成对象属性类型的元组吗?

您可以在Vertex的属性中存储任何对象吗?

您可以动态地向对象添加属性吗?

获取对象名称

无法通过变量ID,使用参数,模板以及每个循环来选择对象名称

在Lua中,您可以从'self'获得对象名称吗?

javascript对象名称属性

返回带有对象值的对象名称

您可以获取通过其调用函数的属性名称吗?

如何使用Java通过对象名称打印类的属性?

我可以通过数字/ id而不是名称来获取Powershell对象的笔记属性吗?

您可以在JSON字符串的对象名称中留一个空格,并且仍可以检索它吗?

通过变量构建对象名称和属性

您可以通过 PowerShell 传递 SQL Server 对象吗?

在对象列表中返回具有最大点属性的对象名称

返回对象名称的函数