如何从LINQ多表连接查询结果中选取单个元素并赋值?
LINQ查询结果赋值的正确语法
你的代码问题主要有两点:
- 重复调用
queryInfo.ToList()会反复执行数据库查询,既浪费性能,还可能拿到不一致的结果 ElementAt(0)取的是整个匿名类型对象,不是单个属性值,直接ToString()只会输出对象的类型名称,自然得不到想要的内容
正确写法(假设查询仅返回单条结果)
先一次性执行查询并获取结果,再通过属性名直接访问对应值:
// 一次性执行查询,获取唯一匹配结果(无匹配时返回null) var result = queryInfo.SingleOrDefault(); if (result != null) { Name = result.NAME; ID = result.ID.ToString(); // 若ID是数值/非字符串类型,需转字符串 exchange = result.EXCHANGE; Creation = result.CREATION.ToString(); // 同理,日期/数值类型需转换 AUsername = result.USERNAME; AEmail = result.q_email; AFullName = result.q_fullname; EEmail = result.b_email; EUsername = result.ORIGINAL_USER; EFullName = result.b_fullname; }
若查询可能返回多条结果
先将结果一次性加载到列表,再取第一条处理:
var resultList = queryInfo.ToList(); if (resultList.Any()) { var firstResult = resultList[0]; // 赋值逻辑同上 Name = firstResult.NAME; ID = firstResult.ID.ToString(); // ... 其他属性赋值 }
关键说明
- 匿名类型的属性名就是你在
select new里定义的名称,比如q_email、b_fullname,直接用这些名称访问即可 - 只执行一次查询(
SingleOrDefault()或ToList()只调用一次),避免重复操作数据库 - 非字符串类型的属性(如ID、日期类型的CREATION)需要手动调用
ToString()转换为字符串
内容的提问来源于stack exchange,提问作者CodingNeeded
相关产品推荐
相关产品推荐

