Lambda加入错误

时间:2014-04-02 08:43:08

标签: c# .net linq lambda

我遇到麻烦加入两张桌子并继续收到"无法从使用中推断出来。尝试明确指定类型参数。"。

  

"错误2方法的类型参数   ' System.Linq.Enumerable.Join(System.Collections.Generic.IEnumerable,   System.Collections.Generic.IEnumerable,   System.Func,System.Func,   System.Func)'无法从中推断出来   用法。尝试显式指定类型参数。 C:\ Pro Asp.net   Mvc 5 \ Chapter 13 \ 1 \ SportsStore -   复制\ SportsStore.WebUI \ Controllers \ DocProductController.cs 29 17 SportsStore.WebUI"

有人能帮助我吗?

public class DocProductController : Controller
{
    private IDocProductRepository repository;
    private IDocMainRepository repositoryMain;

    public DocProductController(IDocProductRepository docProductRepository, IDocMainRepository docMainRepository)
    {
        this.repository = docProductRepository;
        this.repositoryMain = docMainRepository;
    }


    public ViewResult List()
    {
        DocProductListView model = new DocProductListView
        {
            DocProduct = repository.DocProduct
            .Join(repositoryMain.DocMain,
            docProduct => docProduct,
            docMain => docMain.Doc_Id,
            (docProduct, docMain) => new { a = docMain.Doc_Id, b = docProduct.Doc_Id })
           //.OrderByDescending(n => n.DocMain)
        };

        return View(model);
    }
}



public partial class DocMain
{
    public int Doc_Id { get; set; }
    public Nullable<int> Category_Id { get; set; }
    public string Doc_Title { get; set; }
    public Nullable<int> Doc_Order { get; set; }
    public Nullable<byte> Doc_IsAudit { get; set; }
    public Nullable<int> Doc_Clicks { get; set; }
    public string Doc_TitleColor { get; set; }
    public string Doc_Author { get; set; }
    public Nullable<int> User_Id { get; set; }
    public string Doc_Source { get; set; }
    public string Doc_Thumb { get; set; }
    public Nullable<System.DateTime> Doc_DisplayTime { get; set; }
    public Nullable<System.DateTime> Doc_ReleaseTime { get; set; }
    public Nullable<System.DateTime> Doc_UpdateTime { get; set; }
    public string Doc_SEO_Title { get; set; }
    public string Doc_SEO_Description { get; set; }
    public string Doc_SEO_Keywords { get; set; }
    public string Doc_RedirectUrl { get; set; }
    public Nullable<byte> Doc_GenerateHTML { get; set; }
    public string Doc_HTMLCatagory { get; set; }
}



public partial class DocProduct
{
    public int Doc_Id { get; set; }
    public Nullable<int> Category_Id { get; set; }
    public string DocProduct_Content { get; set; }
}

1 个答案:

答案 0 :(得分:0)

docProduct => docProduct,

此行应改为阅读

docProduct => docProduct.Doc_Id

因为那是您加入

的关键

通常,该消息所指的是当您调用泛型方法时,它会尝试推断类型参数。 e.g。

public void MyMethod<T>(T input)

你可以这样称呼:

MyMethod<int>(0);

但实际上,<int>是不必要的,所以你可以写:

MyMethod(0);

因为0是一个int,编译器可以知道T必须是int。

但是如果你有:

public void MyMethod<T>(T input1, T input2)

你用

打电话给你
MyMethod(0, "Hello");

现在您看到的错误消息类似于您收到的错误消息,因为它没有合理的类型T来推断字符串,或者int,那里&# 39; d是一个错误的论点。

通常,该消息表明您的某个参数类型错误。偶尔它也会出现在类型正确的情况下,但是存在一些歧义,导致编译器无法计算出泛型类型。如果您不确定参数的类型是否错误,可以尝试明确指定它们,就像您调用MyMethod的第一个示例一样。至少,它可能会给出关于类型不匹配发生位置的更多信息。