永发信息网

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

答案:3  悬赏:70  手机版
解决时间 2021-04-01 01:19
C# 我用linq联合查询返回一个实体对象,怎么才能返回实体对象
最佳答案
具体方法如下:
匿名类型的传递
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(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 MakeList(this T t)
{
return new List();
}

在List中Add一个User:
public static List MakeList(this T t,params T[] items)
{
return new List(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 SelectProducts()
{
var q =
from p in db.Products
where p.Supplier.Country == "USA" && p.UnitsInStock == 0
select p;
return q.ToList;
}

如果返回的是单行数据的结果集就可以前面提到的
使用 匿名类型的传递 得到需要的结果.
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; }
}
这样在查询结果为多个表的结果集时,就可以解决了。
全部回答
你的返回类型是worker
Linq 取的值是一匿名类型,不能转换过去。
var work = ......
select new Worker{ id=c.w_Id,.......}
return work.firstordefault();追问这个可以解决报错,但是会造成空指针追答LINQ 没取到值,才是空指针 work.firstordefault(); default is null追问

难道我的linq有错
追答worker类 加一个构造函数,默认的,不要有任何代码
public Worker()
{
}追问

是不是我linq有问题,其实我就想用linq联合查询返回worke实体对象,这个方法不对的话,还有别的方法吗,
追答给个Q,远程帮你看下。

你这个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追问

不行,是不是我的语句写的有错误,我就想通过linq联合查询返回worke类型对象,那应该怎么弄
追答你这地方把类名写全,还有为什么要用dynamic返回?
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
请帮我对诗句,
微星笔记本电脑任务栏跑到上面去了怎么把他弄
这是什么东西求解!!!轻飘飘的
焊接不良有那些种类?比如假焊、连焊之类的,
tough life needs no explanation什么意思
8.5x10.1-0.85的简便计算
招商银行信用卡临时提高额度说什么比较好
买二手房必须经过中介吗
考驾照很难吗,不懂红绿灯规则,什么标志也不
小大小念什么
苏轼的诗有哪些
武汉到黄州怎么坐车最便宜?据说8月6号开通了
阴阳师新手队伍怎么搭配 自助式队伍搭配攻略
怎样变得不老实,让自己滑头滑脑?
最靠谱的相亲活动哪里有
推荐资讯
今天三明钢材的价格是多少?
18岁的才有1.6米吃钙片能长高吗
3.5吨的叉车可以叉起4.5吨吗?
求很羞涩的那种BL的校园文
3Dmax对于坡屋面的瓦片贴图怎样操作可以使每
1/(1+x)的原函数是什么
商标机油墨里面深外面浅是怎么回事
24层的高层什么楼层最好
凝结水泵的主要构件零部件
那个可以写成反-3-羟基-2-戊醇吗?
魔法花园蓝幽兰和蓝迪诺,蓝金甲洛克,蓝洛克
网红现象背后的丑恶
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?