在 C# 中使用 Linq 选择 DataRow
如何使用 Linq 将其缩短?
int id = 0;
foreach (DataRow dr in tableClientTableAdapter1.GetData())
{
if (dr[0].ToString() == txtClientName.Text)
{
id = Convert.ToInt16(dr[1]);
break;
}
}
我尝试使用这个
var a = tableClientTableAdapter1.GetData().Cast<DataRow>().Where(cName => cName[0].ToString() == txtClientName.Text);
MessageBox.Show(a[1].ToString());
但我得到了这个错误:
错误 1 无法将 [] 索引应用于“System.Data.EnumerableRowCollection”类型的表达式 C:\Users\[电子邮件受保护]\Desktop[Final][GlobalTek] 监控系统[GlobalTek] 监控系统\xfrmProjectAwarding.cs 89 37 [GlobalTek] 监控系统
任何帮助!
How can I make this to shorter one using Linq?
int id = 0;
foreach (DataRow dr in tableClientTableAdapter1.GetData())
{
if (dr[0].ToString() == txtClientName.Text)
{
id = Convert.ToInt16(dr[1]);
break;
}
}
I tried using this
var a = tableClientTableAdapter1.GetData().Cast<DataRow>().Where(cName => cName[0].ToString() == txtClientName.Text);
MessageBox.Show(a[1].ToString());
But I got this error:
Error 1 Cannot apply indexing with [] to an expression of type 'System.Data.EnumerableRowCollection' C:\Users\[email protected]\Desktop[Final][GlobalTek] Monitoring System[GlobalTek] Monitoring System\xfrmProjectAwarding.cs 89 37 [GlobalTek] Monitoring System
Any help!!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
var a =
是您尝试将其视为单个对象的 DataRow 项目的序列。如果您需要一种结果,请在查询中使用其中之一,其区别在于您对结果的期望。如果可以存在多个项目,但您只对其中第一个感兴趣,请使用
First()
。如果只有一项应该匹配,而如果有更多则出现错误,请使用Single()
。如果在任何一种情况下都可能没有匹配,请使用适当的*OrDefault()
版本。var a =
is a sequence of DataRow items that you are trying to treat as a single object. If you desire one result, use one ofon the query, with the difference being your expectation for the result. If more than one item can be present but you're only interested in the first of them, go with
First()
. If only one item should match and it's an error if there are more, go withSingle()
. If, in either scenario, it's possible for there to be no matches, use the appropriate*OrDefault()
version.试试这个:
但请注意,如果没有匹配,它会抛出异常。如果有可能,您应该这样做:
Try this:
But be warned it will throw an exception if there is no match. If that's a possibility, you should do this:
如果要使用强制转换方法,您还应该使用字段方法。
如果您想通过索引访问,则添加 ToList()
如果您只需要第一个匹配项,您可以根据您希望如何处理 null 来将 where 替换为 First/FirstOrDefault
If you are going to use the cast method you should also use the field method.
ToList() added if you want to access via index
If you only need the first match you can replace where with First/FirstOrDefault depending on how you want null handled