更新2 我开始更多地听从 James 关于使用反射的建议,并得到了一些可以返回基于字符串变量的属性值的东西。我不想把它作为答案,因为我觉得它可能不是最好的解决方案。这是代码:
DataContext dataBase = new DataContext();
List<string> listOfFields = new List<string>;
List<string> listOfUsers = new List<string>
//strFields and strNames are strings generated from listOfFields and listOfUsers
IEnumerable<myUserData> userInfo = dataBase.ExecuteQuery<myUserData>
("select " + strFields + " from myUserData where user_id in (" + strNames + ")");
foreach(var user in userInfo)
{
foreach(string field in listOfFields)
{
string fieldValue = user.GetType().GetProperty(field).GetValue(user,null).ToString
Console.WriteLine(fieldValue);
}
}
更新: 我在进步!我认为。这可能是一个非常糟糕的解决方案和资源占用,我还不确定,但它比我得到的空白屏幕要好。现在的问题是找到一种方法来只返回值而不是字段名称。这是我的代码:
foreach(string userID in listOfUserIDs)
{
//dataBase is a Datacontext
var userInfo = dataBase.myTable
.Where("user_id == @0", userID)
.Select("New(" + strFields + ")");
foreach(var user in userInfo)
{
Console.WriteLine(user);
}
}
这会输出 {first_name = JOHN, last_name = DOE} 等任何其他字段。我希望我能找到一种方法来修改我的 Select 子句以仅选择值。
我是一名新手程序员,尤其是 C# 和任何涉及数据库的新手。这是我使用查询和数据库的第一个项目,我遇到了基于动态查询成功返回结果的问题。
我已经成功地创建了一个将检索正确信息的查询,但我对如何访问检索到的特定字段感到困惑。
IEnumerable<myTable> userInfo = dataBase.ExecuteQuery<myTable>
("select " + Fields + " from myTable where userID in
(" + userNames + ")");
编辑:请原谅我糟糕的命名约定,但 myTable 的类型是:System.Collections.Generic.IEnumerable<DatabaseConnection.myTable>{System.Data.Linq.SqlClient.SqlProvider.OneTimeEnumerable<DatabaseConnection.myTable>}
这只是一个占位符名称,在我的数据库中有一个特定的名称。它位于 Tables 文件夹中 XD
myTable 属于 DatabaseConnection 类类型。 Fields 是我正在查找的一串字段,而 userNames 是一串由几个用户名组成的字符串,每个用户名用逗号分隔。 示例:Fields = "firstName, lastName, idNumber" userNames = "约翰、简、鲍勃"
我的问题是,是否可以为我当前返回的对象类型中的每个用户遍历每个字段?我只看到它是这样明确地完成的:
foreach(var x in userinfo)
{
Console.Writeline(x.firstName);
}
在我目前的情况下,这是行不通的,因为用户可能需要与特定用户名相关的其他字段。
我也尝试过使用动态 Linq 库,虽然我能够成功设置我的选择字符串,但我不确定当 userID 将等于几个不同的字符串时如何正确地设置我的 where 子句。 (名字的数量不会总是一样的)
var dataInfo = dataBase.myTable
.Where("userID == @0", "(" + userIDs + ")")
.Select("New(" + fields + ")");
我已经坚持了好几天了。任何帮助将不胜感激。也许我认为解决方案对此太简单了?我觉得我应该能够在我的第一段代码中使用 GetProperties() 或类似的东西。
如果这个问题得到了回答并且我的格式不正确(这里是第一篇文章),我也非常抱歉。在我的研究过程中,我无法找到我正在寻找的东西,或者我可能只是没有正确理解代码。再次感谢您的帮助!
编辑: 所有这些都是针对我目前正在处理的 Excel 插件。我需要将信息放入列表或某种形式的对象中,以便将每个字段结果放入特定的单元格中。
编辑:如果我使用了错误的术语,请原谅。我觉得我的错误可能出在我的 Enumerable 类型中,将其命名为“myTable”可能会造成混淆。它是从我的服务器资源管理器中拉出的一个表,位于我项目中的 .dbml 文件中。
编辑: 对每个用户运行查询并检索该用户名的每个请求字段是多么低效/耗时?如果这是我只需要添加一个简单循环的东西,我会觉得很傻。
最佳答案
如果我正确理解你的问题并且你只想遍历对象的所有属性(不知道它们在编译时是什么),你可以使用反射,例如
foreach (var prop in userInfo.GetType().GetProperties())
{
Console.WriteLine("Property name: " + prop.Name);
Console.WriteLine("Property value: " + prop.GetValue(userInfo, null));
}
关于C# 动态 Linq/查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12675349/
我正在用Ruby编写一个简单的程序来检查域列表是否被占用。基本上它循环遍历列表,并使用以下函数进行检查。require'rubygems'require'whois'defcheck_domain(domain)c=Whois::Client.newc.query("google.com").available?end程序不断出错(即使我在google.com中进行硬编码),并打印以下消息。鉴于该程序非常简单,我已经没有什么想法了-有什么建议吗?/Library/Ruby/Gems/1.8/gems/whois-2.0.2/lib/whois/server/adapters/base.
我知道我可以指定某些字段来使用pluck查询数据库。ids=Item.where('due_at但是我想知道,是否有一种方法可以指定我想避免从数据库查询的某些字段。某种反拔?posts=Post.where(published:true).do_not_lookup(:enormous_field) 最佳答案 Model#attribute_names应该返回列/属性数组。您可以排除其中一些并传递给pluck或select方法。像这样:posts=Post.where(published:true).select(Post.attr
如何在ruby中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL
我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha
C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.
我正在尝试查询我的Rails数据库(Postgres)中的购买表,我想查询时间范围。例如,我想知道在所有日期的下午2点到3点之间进行了多少次购买。此表中有一个created_at列,但我不知道如何在不搜索特定日期的情况下完成此操作。我试过:Purchases.where("created_atBETWEEN?and?",Time.now-1.hour,Time.now)但这最终只会搜索今天与那些时间的日期。 最佳答案 您需要使用PostgreSQL'sdate_part/extractfunction从created_at中提取小时
有没有办法在Ruby中动态创建数组?例如,假设我想遍历用户输入的书籍数组:books=gets.chomp用户输入:"TheGreatGatsby,CrimeandPunishment,Dracula,Fahrenheit451,PrideandPrejudice,SenseandSensibility,Slaughterhouse-Five,TheAdventuresofHuckleberryFinn"我把它变成一个数组:books_array=books.split(",")现在,对于用户输入的每一本书,我想用Ruby创建一个数组。伪代码来做到这一点:x=0books_array.
我想在IRB中浏览文件系统并让提示更改以反射(reflect)当前工作目录,但我不知道如何在每个命令后进行提示更新。最终,我想在日常工作中更多地使用IRB,让bash溜走。我在我的.irbrc中试过这个:require'fileutils'includeFileUtilsIRB.conf[:PROMPT][:CUSTOM]={:PROMPT_N=>"\e[1m:\e[m",:PROMPT_I=>"\e[1m#{pwd}>\e[m",:PROMPT_S=>"FOO",:PROMPT_C=>"\e[1m#{pwd}>\e[m",:RETURN=>""}IRB.conf[:PROMPT_MO
我在Rails上使用带有ruby的solr。一切正常,我只需要知道是否有任何现有代码来清理用户输入,比如以?开头的查询。或* 最佳答案 我不知道执行此操作的任何代码,但理论上可以通过查看parsingcodeinLucene来完成并搜索thrownewParseException(只有16个匹配!)。在实践中,我认为您最好只捕获代码中的任何solr异常并显示“无效查询”消息或类似信息。编辑:这里有几个“sanitizer”:http://pivotallabs.com/users/zach/blog/articles/937-s
我正在为锦标赛开发一个Rails应用程序。我在这个查询中使用了三个模型:classPlayertruehas_and_belongs_to_many:tournamentsclassTournament:destroyclassPlayerMatch"Player",:foreign_key=>"player_one"belongs_to:player_two,:class_name=>"Player",:foreign_key=>"player_two"在tournaments_controller的显示操作中,我调用以下查询:Tournament.where(:id=>params