我需要获取一些数据并在其他级别使用它。我不能回来(c),我正在寻找一种模式。我怎样才能正确归还?
public string AutoUpdate(string _search)
{
using (var context = new Phone_BookEntities1())
{
var c = from d in context.Cantacts
where d.Cantact1 == _search
select d.Cantact1.ToString();
return c;
}
}
答案 0 :(得分:8)
问题是您的查询正在返回IEnumerable<T>
,其中T
是Cantact1
的类型,但由于您要将其转换为字符串,因此它将返回IEnumerable<string>
。但由于返回类型为string
,您需要返回单个项目。您可以使用FirstOrDefault: -
var c = (from d in context.Cantacts
where d.Cantact1 == _search
select d.Cantact1.ToString()).FirstOrDefault();
或使用Lambda语法: -
var c = context.Cantacts.FirstOrDefault(d => d.Cantact1 == _search);
if(c != null)
return c.Cantact1.ToString();
else
return String.Empty; //any default value
答案 1 :(得分:0)
我想重申Rahul的解决方案,并对Lambda解决方案进行一些扩展。
以下演示了Lambda表达式的声明和用法。
首先,确保您拥有这些名称空间:
using System;
using System.Linq;
using System.Linq.Expressions;
然后
public string AutoUpdate(string _search)
{
Expression<Func<Cantact, bool>> WhereClause = (d) => d.Cantact1 == _search;
// thats: System.Linq.Expressions.Expression<System.Func<Cantact, bool>>
return FirstContact(WhereClause);
// or
//return FirstContact((d) => d.Cantact1 == _search));
}
public string FirstContact(Expression<Func<Cantact, bool>> WhereClause)
{
using (var context = new Phone_BookEntities1())
{
//var query = context.Cantacts.FirstOrDefault(WhereClause);
var query = context.Cantacts.Where(WhereClause).FirstOrDefault();
return (query == null) ? String.Empty : query.Cantact1;
}
}
如果_search
static
或constant
我们不需要在函数范围内声明WhereClause
。
正如您在代码片段中看到的那样,我们将第一次接触的功能移到了它自己的功能中,AutoUpdate
只是构建表达式并传递它。
您将返回query.Cantact1
,这将是_search
..您应该考虑返回Model.Cantact
实体,或者AutoUpdate
是否应该更新实体在某些时候,按照查询命令分离(QCS)模式/职责,返回bool
或只生成方法void
。