我有以下LINQ查询。 FactColumns
是FactColumn
个对象的列表,SelectedColumns
是一个字符串列表。我想在FactColumn
上使用内部联接获取SelectedColumns
个对象的列表。但是,对于以下查询,我收到null
。
var lst = from fc in this.DataSetFact.FactColumns
join column in m_TableDataDict[tableGuid].SelectedColumns
on fc.Name equals column
select new
{
fc.ColumnType,
fc.DataType,
fc.FriendlyName,
fc.Name,
fc.ParentFactName,
fc.Size,
fc.State
};
为什么我会收到null
?
答案 0 :(得分:1)
我可以看到上面的代码运行正常。检查数据是否正确加载。
样品
List<FactColumn> FactColumns = new List<FactColumn>();
List<string> SelectedColumns = new List<string>();
private void Form2_Load(object sender, EventArgs e)
{
FactColumns.Add(new FactColumn() { DataType = "int", Name = "int" });
FactColumns.Add(new FactColumn() { DataType = "string", Name = "string" });
SelectedColumns.Add("string");
var lst = from fc in this.FactColumns join column in SelectedColumns on fc.Name equals column select new { fc.DataType, fc.Name};
foreach (var column in lst)
{
MessageBox.Show(column.Name);
}
}
public class FactColumn
{
public string DataType { get; set; }
public string Name { get; set; }
}
使用lambda:
var lst = this.DataSetFact.FactColumns.Where(hm=>hm_TableDataDict[tableGuid].SelectedColumns.Contains(hm.Name)
答案 1 :(得分:0)
我认为问题在于您的加入。由于您似乎没有使用任何信息,我会将其更改为where语句。试试这个:
var lst = from fc in this.DataSetFact.FactColumns
where m_TableDataDict[tableGuid].SelectedColumns.Contains(fc.Name)
select new
{
fc.ColumnType,
fc.DataType,
fc.FriendlyName,
fc.Name,
fc.ParentFactName,
fc.Size,
fc.State
};