I am trying to use the Join(...) extension method to build a query based on criteria passed to a method. I have an error in the following:
public static IQueryable QueryItems(string param1, string param2, string param3)
{
IQueryable<tbl_Item> query = dataMap.tbl_ItemMap;
//Join is giving me the error: Cannot implicitly convert type
//System.Linq.IQueryable<AnonymousType#1> to System.Linq.IQueryable<tbl_Item>.
//An explilct conversion exists
query = query.Join(dataSet.Tables["tbl_Resource"].AsEnumerable(),
q => q.OriginalResourceID,
r => r.Field<int>("ResourceID"),
(q, r) => new { q, r });
if (!String.IsNullOrEmpty(param1))
query = query.Where(...);
if (!String.IsNullOrEmpty(param2))
query = query.Where(...);
if (!String.IsNullOrEmpty(param3))
query = query.Where(...);
var results = query.Select(result => new
{
Origin = result.OriginalResourceID, // needs to be a name from Tables["tbl_Resource"]
Current = result.CurrentResourceID, // needs to be a name from Tables["tbl_Resource"]
...,
...,
});
return results; // results are displayed in a DataGridView
}
Additional information on the Join extension method shows:
'a is new {tbl_Item q, DataRow r}
I understand that this is most likely the problem. Does this mean it is pointless to hold DataTables in memory for look-ups like this? "tbl_Resource" contains 4 columns, 2 of which are a ResourceID (the key), and a resourceName (what I want to push to the Select extension method).
I won't be naive and believe that I am implementing the best (read most efficient) logic. I can work with creating a Dictionary for the Join method if that is the best solution; however, it would seem that this would give me the same error I have now.
Any ideas?