如何在 LINQ to DataSet 的匿名类中使用基于查询数据的条件?
Posted
技术标签:
【中文标题】如何在 LINQ to DataSet 的匿名类中使用基于查询数据的条件?【英文标题】:How can I use a condition based on the queried data in an anonymous class in LINQ to DataSet? 【发布时间】:2011-01-22 20:08:48 【问题描述】:我可以通过循环简化查询的结果来做到这一点:
var query = from myrecord in dt.AsEnumerable()
where myrecord.Field<string>("field1") == "value1" || myrecord.Field<string>("field1") == "value2"
select myrecord;
foreach(var myrecord in query)
//if value1, then "X"
//sum += field2
但是,我想知道在 LINQ 语句中是否有可能。
具有两个成员的匿名类:名称和值。名称是“X”或“Y”,具体取决于字段 1,值是满足条件的记录的所有字段 2 值的总和。我想我需要使用 Count() 方法,但我不确定如何或在哪里。也许我需要使用“group”和“into”从临时表中获取计数?
如果有 (field1 == "value1") 的记录,则字符串将为“X”,否则字符串将为“Y”。
var query = from table in dt.AsEnumerable()
where table.Field<string>("field1") == "value1" ||
table.Field<string>("field1") == "value2"
select new
Name = (condition ? "X" : "Y"),
Value = //sum all field2 values
;
提前致谢!
【问题讨论】:
【参考方案1】:当然可以,以下示例的工作原理类似
class Program
static void Main(string[] args)
List<Person> persons= new List<Person>();
var result = from p in persons
select new
Name = (s.IsMarried ? s.X : s.Y)
;
class Person
public bool IsMarried get; set;
public string X get; set;
public string Y get; set;
【讨论】:
我认为我的问题措辞错误,但这确实回答了所提出的问题。我想我正在尝试使用 LINQ 查询来构建匿名类的一个记录/一个实例,而不是一组。【参考方案2】:您只需使用已有的“表格”变量。
var query = from table in dt.AsEnumerable()
where table.Field<string>("field1") == "value1" ||
table.Field<string>("field1") == "value2"
select new
Name = (table.whatever ? "X" : "Y"),
Value = table.something.Sum()
;
【讨论】:
【参考方案3】:你可以通过做得到表格的总和
table.Sum(t => t.ValueToSum) //Or whatever sub-table you need to sum
【讨论】:
以上是关于如何在 LINQ to DataSet 的匿名类中使用基于查询数据的条件?的主要内容,如果未能解决你的问题,请参考以下文章
Linq to SQL 还是 Linq to DataSet?
LINQ to Dataset 是 LINQ to EF 的子集还是这两者是独立的?