C# 需要在LINQ的DTO中选择不同类型的值

C# 需要在LINQ的DTO中选择不同类型的值,c#,linq,C#,Linq,我需要选择两个具有不同数据类型的不同值,并在DTO中使用它 我尝试了下面的代码,这只选择了产品名称,我还想选择Productid var SubList = (from c in _context.Product where (c.Id == Productid) select new productDto { SubProduct = c.SubProduc

我需要选择两个具有不同数据类型的不同值,并在DTO中使用它

我尝试了下面的代码,这只选择了产品名称,我还想选择Productid

var SubList = (from c in _context.Product    
               where (c.Id == Productid)
               select new productDto
               {
                    SubProduct = c.SubProduct,
               }).ToList().Distinct();

foreach (var subproductVal in SubList)
{
    String subproduct = subproductVal.SubProduct;
    var productList = (from c in _context.Product
                       orderby c.ProductName descending
                       where (c.SubProduct == subproduct)
                       select
                              c.ProductName
                      ).Distinct().ToArray();

    await _context.SaveChangesAsync();
    subproductVal.ProductName = productList;
}
我需要选择产品ID和产品名称

您可以写:

var SubList = (from c in _context.Product
                           where (c.Id == Productid)
                           select new productDto
                           {
                               SubProduct = c.SubProduct,

                           }).ToList().Distinct();

            foreach (var subproductVal in SubList)
            {
                String subproduct = subproductVal.SubProduct;

                var productList = (from c in _context.Product
                                   orderby c.ProductName descending
                                           where (c.SubProduct == subproduct)
                                   select new {
                                       c.ProductName,
                                       c.ProductId 
                                     ).Distinct().ToArray();
                 await _context.SaveChangesAsync();

                ...
             }
然后您的
productList
是一个匿名类型的数组,其中数组的每个元素都是匿名类型的对象

您还可以添加一些类:

public class ProductInfo
{
   public int ProductId {get;set;}
   public string ProductName {get;set;}
}
然后,您的代码如下所示:

...

var productList = (from c in _context.Product
                                   orderby c.ProductName descending
                                           where (c.SubProduct == subproduct)
                                   select new ProductInfo {
                                       ProductName = c.ProductName,
                                       ProductId = c.ProductId 
                                     ).Distinct().ToArray();

...
然后,
productList
数组的每个元素都是类
ProductInfo
的对象


最后,您的代码(如我所见)不是最优的。您应该将其重写为一个linq查询(尤其是在使用数据库时)。

使用新的{c.ProductName,c.ProductId}而不是c.ProductName对您有效吗?ProductName和ProductId都是数组类型,您可以编写
var productNameArray=productList。选择(e=>e.ProductName)。ToArray()