如何通过使用实体框架获得单一价值

时间:2011-08-19 11:26:14

标签: c# winforms linq entity-framework linq-to-entities

我有一个

     table product with colums product_id 
                               prodcut_name
                               category_id

                another table  category 
                               category_id
                               category_name

我正在使用工作正常的datagridview填充这些产品详细信息

我需要获取datagridview中所选行的类别名称,因为我已经这样做....

        private void productGridview_Cellclick(object sender, DataGridViewCellEventArgs e)
        {
               string productname = Convert.ToString(selectedRow.Cells["productnam"].Value);
               var categoryids = from cats in abc.products
                                where cats.product_Name.Equals(productname)
                                select cats.category_Id;


            var catogynames = from categorytypes in abc.categories
                              where categorytypes.category_Name.Equals(categoryids)
                              select categorytypes.category_Name;


            string categorynames = catogynames;    

       }                              

得到了

  error : cannot implicitly convert type sysytem.linq.iqueryble<string> to string ...

我需要做些什么来获取productgridview productnam列中所选单元格的单个类别名称

任何建议..请..

非常感谢....

修改后的代码:                得到了一个错误:

not supported exception:

Unable to create a constant value of type 'System.Object'. Only primitive types ('such as Int32, String, and Guid') are supported in this context.

2 个答案:

答案 0 :(得分:9)

您的查询返回的行为类似于集合的查询对象。您可以使用FirstFirstOrDefaultSingleSingleOrDefault分别从查询中检索第一个或单个项目。

var categoryid = (from cats in abc.products
                  where cats.product_Name.Equals(productname)
                  select cats.category_Id).SingleOrDefault();


string categoryname = (from categorytypes in abc.categories
                       where categorytypes.category_Name.Equals(categoryid)
                       select categorytypes.category_Name).SingleOrDefault();

答案 1 :(得分:0)

你的铸造问题就在这里

  string categorynames = catogynames;

catogynamesIQueryble。你可以这样做,

List<String> categorynames = catogynames.ToList();

或者您可以遍历catogynames

请仔细检查您的变量名称:D。