gpt4 book ai didi

c# - IEnumerable 的显式转换

转载 作者:行者123 更新时间:2023-12-02 21:51:41 24 4
gpt4 key购买 nike

我有一个方法,可以使用 LINQ 对两个 DataTable 执行不匹配的查询。它生成了一个错误,通过在网上查找,我已经确定了我认为错误发生的位置,但我不知道如何修复它。

public IEnumerable<int> UnbilledAuditKeys(DataTable audits, string keyFieldName) {
var billedAudits =
from x in this.GetBilledAudits().AsEnumerable()
select new {
k = x.Field<int>(keyFieldName)
};

var allAudits =
from x in audits.AsEnumerable()
select new {
k = x.Field<int>(keyFieldName)
};

var unbilled =
from a in allAudits
join b in billedAudits on a.k equals b.k
into combined
from c in combined.DefaultIfEmpty()
where c == null
select new { // This is what's causing the error (I think)
k = a.k
};

return unbilled; // This line the compiler is rejecting
}

返回的错误是

Cannot implicitly convert type 'System.Collections.Generic.IEnumerable<AnonymousType#1>' to 'System.Collections.Generic.IEnumerable<int>'. An explicit conversion exists (are you missing a cast?)

我不知道如何解决它。我尝试过将整个 LINQ 表达式转换为 IEnumerable 等显而易见的方法,但这会生成运行时异常。

任何想法将不胜感激!

编辑:

final方法:

public IEnumerable<int> UnbilledAuditKeys(DataTable rosliAudits, string keyFieldName) {
var billed = this.GetBilledAudits().AsEnumerable().Select(x => x.Field<int>(keyFieldName));
var allaudits = rosliAudits.AsEnumerable().Select(x => x.Field<int>(keyFieldName));
var unbilled = allaudits.Except(billed);
return unbilled;
}

最佳答案

简单修复:

var unbilled =
from a in allAudits
join b in billedAudits on a.k equals b.k
into combined
from c in combined.DefaultIfEmpty()
where c == null
select a.k;

此外,其他两个查询似乎不需要匿名结构,最后一个查询可以大大简化:

public IEnumerable<int> UnbilledAuditKeys(DataTable audits, string keyFieldName) {
var billedAudits =
from x in this.GetBilledAudits().AsEnumerable()
select x.Field<int>(keyFieldName);

var allAudits =
from x in audits.AsEnumerable()
select x.Field<int>(keyFieldName);

var unbilled = allAudits.Except(billedAudits); // LINQ has many useful methods like this

return unbilled;
}

关于c# - IEnumerable<AnonymousType#1> 的显式转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18514968/

24 4 0