我正在使用LINQ查询来获取具有特定条件的行。这是查询。
var query = from v in dt1.AsEnumerable()
join c in dt2.AsEnumerable() on v.Field<int>("ID") equals c.Field<int>("ID")
where v.Field<string>("col1").Equals("abcd")
&& (c.Field<string>("col1").Equals("8776") || c.Field<string>("col1").Equals("8775"))
select new
{
ok = (from a in v where v.Field<string>("stah").Equals("1") select a).count(),
ok1 = (from a in v where v.Field<string>("stah").Equals("2") select a).count(),
ok2 = (from a in v where v.Field<string>("stah").Equals("3") select a).count()
};
错误出现在
中ok = (from a in v where v.Field<string>("stah").Equals("1") select a).count()
错误是
无法找到源类型的查询模式的实现 &#39;的System.Data.DataRow&#39 ;. &#39;凡&#39;找不到
示例输入: DT1
iD col1 stah
1 4567 1
2 8748 2
3 3487 3
4 8776 1
DT2
iD col1
1 4754
2 4576
输出
Get count of all rows where stah=1 && dt2.col1='4754'
但我无法让它发挥作用。这个的正确语法是什么?
答案 0 :(得分:2)
如果我理解正确,那么这就是你所需要的: -
var query = dt1.AsEnumerable()
.Where(x => x.Field<int>("stah") == 1
&& dt2.AsEnumerable()
.Any(z => z.Field<int>("Id") == x.Field<int>("Id")
&& z.Field<string>("Col1") == "4754")
).Count();
答案 1 :(得分:1)
@HarshitShrivastava提到我之前对查询的尝试没有考虑到所有where条件。
使用Linq查询和Linq Lambda的混合版本如何:
var query = from dataRows1 in dt1.AsEnumerable().Where(r => r.Field<string>("col1").Equals("abcd"))
join dataRows2 in dt2.AsEnumerable().Where(r => r.Field<string>("col1").Equals("8776") || r.Field<string>("col1").Equals("8775"))
on dataRows1.Field<int>("ID") equals dataRows2.Field<int>("ID") into b
select new
{
id = dataRows1.Field<int>("ID"),
ok = (from a in b where a.Field<string>("stah").Equals("1") select a).Count(),
ok1 = (from a in b where a.Field<string>("stah").Equals("2") select a).Count(),
ok2 = (from a in b where a.Field<string>("stah").Equals("3") select a).Count()
};
注意:我在投影输出中包含了ID字段,仅用于验证结果。根据需要删除。