例子1:Linq to EF join Linq to object 查询OK,不报错。这是因为(Linq to Entity在join前,Linq to Object在join后。Object仅支持基元类型(Int32、String 和 Guid)。
List<string> str = new List<string> {"10002","2","3" };
using (TPSModel db = new TPSModel())
{
var query = from a in db.WorkerModels
join b in str on a.WorkerID equals b
select a;
Console.WriteLine(JsonConvert.SerializeObject(query));
}
例子2:Linq to object join Linq to EF 查询List集合数据库对象OK(不限制特殊类型)。
var siteLineInfoList = new List<Site_LineInfo>()
{
new Site_LineInfo() {Enable = true, LineName = "B", LineNum = "B"}
};
using (MESDB db = new MESDB())
{
var c = (from s in siteLineInfoList
join m in db.MesMachineConfig
on s.LineNum equals m.LineNum
select m).ToList();
}
例子3:Linq to object join Linq to EF select的时候用linq to object 调用本地方法getEqpDeviceByLine() 查询OK,不报错。
List<string> str = new List<string> {"B","10001","3" };
using (TPSModel db = new TPSModel())
{
var query = from a in str
join b in db.WorkerModels on a equals b.WorkerID
select new { b, c=getEqpDeviceByLine(a) };
Console.WriteLine(JsonConvert.SerializeObject(query));
}
例子4:Linq to EF join Linq to object select的时候用Linq to object 调用本地方法getEqpDeviceByLine() 查询NG,报错。
List<string> str = new List<string> { "0201B101K500CXLB", "10001", "3" };
using (TPSModel db = new TPSModel())
{
var query = (from b in db.WorkerModels
join a in str on b.WorkerID equals a
select new { b, c = getEqpDeviceByLine("")});
Console.WriteLine(JsonConvert.SerializeObject(query));
}