我对LINQ来说是全新的,我想将一些我的SQL查询重写为LINQ(只是为了学习),并且我已经开始陷入困境。可能解决方案很简单但是我说我完全是新的,而且我没有找到解决方案。
我有一个问题:
string typMoneta = textBox1.Text;
var moneta = from x in db.grupyTowarowes
where x.typ == typMoneta
select new
{
x.grupa
};
哪个正常,当我设置
dataGridView1.DataSource = moneta;
我想在第二个查询中使用此输出:
var query = from c in dbContext.Picking
where c.Number == 1000 && c.Group == moneta
select new
{
c.id
};
问题在于c.Group == moneta
。我不知道正确的语法。有人能帮助我吗?
答案 0 :(得分:1)
我认为您打算使用moneta.Contains(c.Group)
。在第一个查询中,请确保使用ToList()
将数据加载到内存中。
IList<string> moneta = (from x in db.grupyTowarowes
where x.typ == typMoneta
select x.grupa).ToList();
var query = (from c in dbContext.Picking
where c.Number == 1000 && moneta.Contains(c.Group)
select c.id).ToList();
答案 1 :(得分:0)
moneta
是IEnumerable<T>
,其中T
是grupa
的类型var query = from c in dbContext.Picking
where c.Number == 1000
&& moneta.Contais(c.Group)
select new
{
c.id
};
话虽如此,你应该写下你的查询:
var query = dbContext.Picking
.Where(pick => pick.Number == 1000
&& moneta.Contains(pick.Group))
.Select(pick => pick.id);
或流利的语法如下:
xobj.status === 404
答案 2 :(得分:0)
请注意,moneta不是字符串的集合。它是具有名为&#34; grupa&#34;的字符串属性的对象集合。
这对你有用吗?
var query =
from c in dbContext.Picking
where c.Number == 1000
&& moneta.Any(m => m.grupa == c.Group)
select new { c.id };
你也可以这样做:
// Get list of strings
var groups = moneta.Select(m => m.grupa).ToList();
// Get items where "Group" value is one of the strings in groups list, above.
var query =
from c in dbContext.Picking
where c.Number == 1000
&& groups.Contains(c.Group)
select new { c.id };