如何用LINQ只查询一条记录?

dangdang2471 2011-05-06 11:50:02
下面这段代码的目的为查询满足条件的记录,并返回它。
如果有多条满足,只返回第一条;如果没有满足条件的记录,则返新创建的一个MSG_DESC对象。
现在的问题是当执行msgDesc.Count()时,就需要查询出所有的结果。这样势必会造成效率低下,因为我只需要第一条记录就可以了。
请问该如何做?

            var msgDesc = from item in _MsgList
where item.MD_TABLE.Equals("tableset") && item.MD_FIELD.Equals("ID") && item.MD_VALUE.Equals(_id.ToString())
select item;
if (msgDesc.Count() == 0)
return new MSG_DESC();
else
return msgDesc.First();
...全文
1456 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
cuixiaozuzi 2012-06-15
  • 打赏
  • 举报
回复
FirstOrDefault();
公子姬良 2012-06-08
  • 打赏
  • 举报
回复
其实,我觉得5楼的方法挺好的。
czy415999744 2011-05-11
  • 打赏
  • 举报
回复
一楼的是正解,使用拉姆达表达式、
Tragedy 2011-05-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 claymore1114 的回复:]
C# code

var first=_MsgList.FirstOrDefault(item=>item.MD_TABLE.Equals("tableset") && item.MD_FIELD.Equals("ID") && item.MD_VALUE.Equals(_id.ToString())
[/Quote]
1楼正解
jeje 2011-05-10
  • 打赏
  • 举报
回复
用FirstOrDefault好一些,当没有查询结果时会返回一个默认的值不容易出错
  • 打赏
  • 举报
回复
修改你的代码,类似于:
var ret=msgDesc.FirstOrDefault();
if (ret==null)
return new MSG_DESC();
else
return ret;
  • 打赏
  • 举报
回复
FirstOrDefault,如果返回null则说明没有数据。
claymore1114 2011-05-06
  • 打赏
  • 举报
回复

var first=_MsgList.FirstOrDefault(item=>item.MD_TABLE.Equals("tableset") && item.MD_FIELD.Equals("ID") && item.MD_VALUE.Equals(_id.ToString())
ljyabc1028 2011-05-06
  • 打赏
  • 举报
回复
public Entity.产品套餐配置表 SeleteOnePackagePrice(int colorid,int mealid) {
var context = new Entity.Entities();
string price = string.Empty;
Entity.产品套餐配置表 mm = new Entity.产品套餐配置表();
try
{
var queryTab = from custom in context.表名 where (custom.COLOUR_ID == colorid && custom.P_ID == mealid) select custom;
if (queryTab.Count() > 0) {
mm = queryTab.FirstOrDefault();
}
}
catch
{
}

return mm;
}
建议不要用First,用FirstOrDefault,为什么呢?你可以上网查下资料
ShinNakoruru 2011-05-06
  • 打赏
  • 举报
回复
Only one line of code.

return MsgList.FirstOrDefault(x=>
x.MD_TABLE.Equals("tableset") &&
x.MD_FIELD.Equals("ID") &&
x.MD_VALUE.Equals(_id.ToString()))??new MSG_DESC();
yellowhe3 2011-05-06
  • 打赏
  • 举报
回复
(语句).FirstOrDefault();就可以了
  • 打赏
  • 举报
回复
表达式中可以使用“两个问号”来写。
q107770540 2011-05-06
  • 打赏
  • 举报
回复
var msgDesc =( from item in _MsgList
where item.MD_TABLE.Equals("tableset") && item.MD_FIELD.Equals("ID") && item.MD_VALUE.Equals(_id.ToString())
select item).FirstOrDefault();

return msgDesc ==null? new MSG_DESC():msgDesc ;
dangdang2471 2011-05-06
  • 打赏
  • 举报
回复
表达式方式的 FirstOrDefault 怎么写?
能不能给个例子?

8,493

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧