C# - VS 2017 - LINQ to Entities 我需要提取一些数据,逐步执行每个项目,如果符合某个标准,则更改标记。
我知道这是因为匿名类型 - 我已经阅读了几篇关于它的帖子,但我不知道如何解决它。
我需要将好事从虚假改为真。 这是我获取数据的地方:
var RMA_stops_all = (from rma in rDb.DistributionStopInformations
join line in rDb.DistributionLineItems on rma.UniqueIdNo equals line.UniqueIdNo
where line.RmaNumber != null
&& (line.DatetimeCreated > Convert.ToDateTime(dateToCheck_rma)
&& line.DatetimeCreated < Convert.ToDateTime(dateToCheck_rma).AddDays(7))
&& rma.CustomerNo == TNGCustNo
select new
{
line.DatetimeCreated,
rma.UniqueIdNo,
line.RmaNumber,
line.RmaOriginalUniqueId,
line.ItemSequenceNo,
line.ItemNumber,
good = false
}).ToArray();
这是我逐步完成每个项目的地方:
foreach (var testRma in RMA_stops_all)
{
if (testRma.RmaNumber.Contains("/078"))
{
testRma.good = true;
}
}
错误说:
&#34;属性或索引器&#39;匿名类型:DateTime? DatetimeCreated, 十进制UniqueIdNo,字符串RmaNumber,十进制? RmaOriginalUniqueId, decimal ItemSequenceNo,string ItemNumber,bool good&gt; .good&#39;不可能是 分配给 - 它是只读的&#34;
我是否需要更改LINQ
或我的foreach
?
答案 0 :(得分:3)
最简单的方法是从以下位置更改匿名对象:
select new
{
line.DatetimeCreated,
rma.UniqueIdNo,
line.RmaNumber,
line.RmaOriginalUniqueId,
line.ItemSequenceNo,
line.ItemNumber,
good = false
}
为:
select new
{
dtCreated = line.DatetimeCreated,
uniqueID = rma.UniqueIdNo,
rmaNumber = line.RmaNumber,
origUniqueID = line.RmaOriginalUniqueId,
itemSeqNo = line.ItemSequenceNo,
item = line.ItemNumber,
good = line.RmaNumber.Contains("/078")
}
我还在匿名对象中命名了所有变量,这将使得在方法稍后需要时更容易访问它们。尽管我看到你在初始查询中这样做,但是在Contains
调用之前检查值是一个很好的习惯。
答案 1 :(得分:0)
匿名对象是只读的,一旦创建就无法修改。
此问题的解决方案是为此创建一个类,并在其中添加所需的属性,然后在linq查询中使用该类来填充该类型的集合。
public class DataModel
{
public DateTime DatetimeCreated {get;set;}
........................
........................
// other properties that are needed
}
然后在使用该类的查询项目中:
select new DataModel {
DateTimeCreated = line.DatetimeCreated,
.............
.............
// other properties
}).ToArray();
现在您应该可以在代码中修改集合了。