C# 我用linq联合查询返回一个实体对象,怎么才能返回实体对象

 我来答
最后的仙人
推荐于2018-03-04 · TA获得超过1961个赞
知道大有可为答主
回答量:1509
采纳率:0%
帮助的人:1384万
展开全部

你这个work是你声明的一个匿名类的对象,并不是Worker这个类的对象

如果你这个Worker就是entity.Workers同一个类的话,select改成

select c;

就可以了

如果不是同一个类,但是属性都一样的话,最后一行select改成

select new Worker{W_Id=c.W_Id,W_Name=c.W_Name,W_Identity=c.W_Identity,PS_Id=c.PS_Id,W_Password=c.W_Password};
更多追问追答
追问

是同一个类,可是也不行,两种都试了

追答
work是个集合,你return work.First();试试,不过最好先判断一下Count
greystar_cn
2015-08-05 · 知道合伙人软件行家
greystar_cn
知道合伙人软件行家
采纳数:16407 获赞数:17260
本人主要从事.NET C#方向的技术开发工作,具有10多年的各类架构开发工作经验。

向TA提问 私信TA
展开全部
你的返回类型是worker

Linq 取的值是一匿名类型,不能转换过去。
var work = ......
select new Worker{ id=c.w_Id,.......}
return work.firstordefault();
更多追问追答
追问
这个可以解决报错,但是会造成空指针
追答
LINQ 没取到值,才是空指针 work.firstordefault();   default is null
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xiangjuan314
2016-03-04 · TA获得超过3.3万个赞
知道大有可为答主
回答量:2.9万
采纳率:0%
帮助的人:2808万
展开全部
具体方法如下:
匿名类型的传递
static void Main(string[] args)
{
var User = GetAnonymous().Cast(new { UserName = "", LastLoginIp = "" });
Console.Write(User.UserName);
}

static object GetAnonymous()
{
var User = new { UserName = "yaosansi", LastLoginIp = "127.0.0.1" };
return User;
}
当定义一个匿名类型,只能通过object类型传递,传递后编译器将无法获悉匿名类型的实际类型。
这行可以通过Cast扩展方法来进行强制转换。以下是Cast方法的原型。

public static T Cast<T>(this object o, T t)
{
return (T)o;
}

生成匿名类型的List
var User = GetAnonymous().Cast(new { UserName = "", LastLoginIp = "" });
var list = new List<???>();
原理和上面一致。
var User = new { UserName = "yaosansi", LastLoginIp = "127.0.0.1" };
var list = User.MakeList();
list.Add(User);
Console.Write(list[0].UserName);
MakeList()方法:
public static List<T> MakeList<T>(this T t)
{
return new List<T>();
}

在List中Add一个User:
public static List<T> MakeList<T>(this T t,params T[] items)
{
return new List<T>(items);
}
这时调用的时候可以写成:
var User = new { UserName = "yaosansi", LastLoginIp = "127.0.0.1" };
var list = User.MakeList(User);
Console.Write(list[0].UserName);
LINQ中是多表查询的。
var q =
from p in db.Products
where p.Supplier.Country == "USA" && p.UnitsInStock == 0
select p;
以上的查询是两个有关系的表,并且返回的只是一个表的内容,
这种情况下可以在数据层中返回强类型的List。如:
public List<Products> SelectProducts()
{
var q =
from p in db.Products
where p.Supplier.Country == "USA" && p.UnitsInStock == 0
select p;
return q.ToList<Products>;
}

如果返回的是单行数据的结果集就可以前面提到的
使用 匿名类型的传递 得到需要的结果.
public object SelectProducts()
{
var q =
from p in db.Products
where p.Supplier.Country == "USA" && p.UnitsInStock == 0
select new {p.UnitsInStock,p.Supplier.Sid};
var result = q.Single();
return result;
}
这个前提是业务逻辑层需要知道数据层的匿名类型中的具体类型。
方法一:
自定义与返回类型相同结构的类,
public class CustomQuery
{
public uint UnitsInStock { get; set; }
public int Sid { get; set; }
}
这样在查询结果为多个表的结果集时,就可以解决了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式