我有一个表tblB中的对象列表,它是以下列格式从db中检索的。
public class playdata
{
public string consumerid { get; set; }
public string play_time { get; set; }
public string genre{ get; set; }
.
.
.
public int mycounter{ get; set; }
}
我有一个表tblA,它有一个列colA,其int为0到1000。
我希望创建一个类似于sql的linq查询,如下所示..
Select x.i as numindex, y.consumerid,y.play_time,y.genre
From
(Select colA as i from tblA) x
left join
(
Select consumerid, play_time,genre,mycounter from tblB
)y on y.mycounter > x.i
我尝试了下面的失败......
我发现Enumerable.Range(0,1001)生成了一个数字系列,因此无需获取该表数据。
List<playdata> plays = .....
var q= (from s in Enumerable.Range(0, 1001)
join p in plays on s < p.mycounter into t
from rt in t.DefaultIfEmpty() select new{
numindex=s,
consumerid=p.consumerid,
play_time =p.play_time,
genre=p.genre
}).ToList();
我在第二行看到两个错误..
p不在等于左侧的范围内。我也尝试过.p.mycounter&gt; s,结果相同。
另一个错误在于它显示的位置..预期的上下文关键字等于
如果我将第二行改为..
,错误就会消失join p in plays on s equals p.mycounter into t
真诚感谢所有帮助。
由于
答案 0 :(得分:0)
您必须使用在LINQ中表示左外连接的替代方法:
var q =
(from i in Enumerable.Range(0, 1001)
from p in plays.Where(x => x.mycounter > i).DefaultIfEmpty()
select new
{
numindex = i,
consumerid = p?.consumerid,
play_time = p?.play_time,
genre = p?.genre
}).ToList();
请注意,在LINQ to Objects中,当没有匹配元素时,您必须考虑左外连接的右侧返回null
,否则您将获得NullReferenceException
。